Примерно с 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.