Как свалить с платформы Google App Engine

Логотип Google App Engine

Примерно с 17 февраля 2011 года гугл без предупреждения стал блокировать доступ к сайтам на платформе GAE. Причем блокировались IP адреса из Германии, Канады, США и многих других “правильных” стран. Прошло 3 месяца, а воз и ныне там, что-либо менять они не собираются.

При таком раскладе можно только распрощаться с этой говноплатформой, но сделать это не так-то просто. Очень жаль потраченного времени на написание CMS под GAE, разработку шаблонов, да и времени на миграцию остается не так много. Но тем не менее, если вам дороги постоянные клиенты, Google не оставляет другого выбора.

К счастью, для работы с приложениями на платформе GAE предусмотрен так называемый remote api. Он то и позволяет забрать или залить данные без использования веб интерфейса. В моем приложении этот интерфейс был реализован, и забрать данные для меня не составило особого труда.

Забрать дамп базы можно так:

./bulkloader.py –dump –app_id=your-app-id –url=http://your-app-id .appspot.com/remote_api –filename=dump.sql3

Дальше надо бы перенести данные на новую CMS, или на худой конец, согнать данные в статику.

Понятно, что статика не позволит интерактивно взаимодействовать с клиентами, и эту часть придется реализовать самостоятельно; однако страницы с описанием товаров/услуг можно оставить в виде статических файлов HTML.

Получить статику можно, натравив на сайт обычный wget с рекурсией; но при невысокой скорости интернета этот процесс может затянуться. Поэтому будет рационально развернуть скачанный дамп на локальной машине, и натравить wget на localhost.

Сначала стартуем свое приложение:
./dev_appserver.py your-app-id
В другой консоли разворачиваем скачанный дамп, используя remote api:
./bulkloader.py –restore –app_id=your-app-id –url=http://127.0.0.1:8080/remote_api –filename=dump.sql3
Используем wget для получения статических файлов HTML:
wget -r http://localhost:8080

Все, теперь у нас есть куча статики, которую можно использовать.

Не исключено, что гугл все-таки одумается, и снимет блокировки айпи адресов на своей стороне. Поэтому окончательно отказываться от GAE я бы не стал, пока что есть возможность поддерживать CMS на локальной машине.

Однако неожиданно выяснилось, что так же просто забрать данные с локальной машины и залить их в гугловский GAE не получится. При попытке скачать dump с локальной машины в один файл, bulk_uploader ругается примерно так:

[ERROR ] Unable to download kind stats for all-kinds download.
[ERROR ] Kind stats are generated periodically by the appserver
[ERROR ] Kind stats are not available on dev_appserver.

Девелоперская среда не умеет сливать все данные локального хранилища в один файл, поэтому данные с локалхоста можно забрать в несколько приемов, по числу сохраненных моделей в локальном хранилище. Примерно так:

./bulkloader.py –dump –app_id=your-app-id –kind=table1 –url=http://127.0.0.1:8080/remote_api –filename=table1.sql3

./bulkloader.py –dump –app_id= your-app-id –kind=table2 –url=http://127.0.0.1:8080/remote_api –filename=table2.sql3

Сохраненные таким образом дампы таблиц без проблем заливаются по очереди на Google App Engine.

Обновление Mplayer и файлы WMV

Очередное обновление Mplayer оказалось неудачным, при попытке проиграть любой файл WMV программа сваливается с вот таким текстом ошибки:

MPlayer interrupted by signal 11 in module: init_video_codec

- MPlayer crashed by bad usage of CPU/FPU/RAM.

Recompile MPlayer with --enable-debug and make a 'gdb' backtrace and

disassembly. Details in DOCS/HTML/en/bugreports_what.html#bugreports_crash.

- MPlayer crashed. This shouldn't happen.

It can be a bug in the MPlayer code _or_ in your drivers _or_ in your

gcc version. If you think it's MPlayer's fault, please read

DOCS/HTML/en/bugreports.html and follow the instructions there. We can't and

won't help unless you provide this information when reporting a possible bug.

Чтобы все заработало снова, надо всего лишь удалить пакет w32codec-all из системы, и все заработает.

Решение весьма странное, поскольку видеокодеки всегда помогали Mplayer’у в обработке различных видеофайлов. Похоже, что последние версии Mplayer’а больше не нуждаются в этом пакете и более того, конфликтуют с кодеками из w32codec-all.