Play! framework набирает популярность и на Хабре уже есть следующие топики:
Отличный Java MVC фреймворк — Play Framework
‘Hello World’ tutorial — Ваше первое приложение на Play framework (Часть 1)
‘Hello World’ tutorial — Ваше первое приложение на Play framework (Часть 2)
Мои 5 любимых фишечек в Play Framework
Одна из замечательных возможностей Play! — развертывание приложения в облачную инфраструктуру App Engine от Google.
На приложения, которые исполняются в GAE накладываются довольно жесткие (по сравнению с обычными Play! приложениями) ограничения, в основном, это связано с модулем сохранения данных (JPA / Hibernate). Для того, чтобы приложение без проблем заработало в GAE следует отказаться от JPASupport/Model хелперов и использовать только базовые возможности JPA.
Альтернативой также может стать использование модуля Siena.
В данном топике я пошагово опишу процесс развертывания приложения Play! в Google AppEngine.
Процесс установки и использования описан применительно к ОС Linux, но существенных различий при использования других ОС возникнуть не должно.
Абсолютные пути в примерах команд намеренно оставлены для наглядности. Установка проводилась в домашний каталог пользователя. При желании вы всегда можете добавить путь к Play! в PATH.
1. Загружаем последнюю версию фреймворка с сайта разработчиков
(также можно получить последнюю версию с github: www.playframework.org/code )
cd
wget download.playframework.org/releases/play-1.2.1.zip
unzip play-1.2.1.zip
cd play-1.2.1/
2. Загружаем AppEngine SDK for Java
wget googleappengine.googlecode.com/files/appengine-java-sdk-1.5.1.zip
unzip appengine-java-sdk-1.5.1.zip
3. Устанавливаем модули для работы с GAE и Siena
/home/albert/play-1.2.1/play install gae
/home/albert/play-1.2.1/play install siena
Отвечаем «y» на вопросы, дальше произойдет автоматическая загрузка и установка модулей.
4. Создадим учетную запись и приложение на appengine.google.com
(вход по учетной записи Google, необходимо подтвердить номер телефона, после чего вы сможете создать до 10 приложений AppEngine).
Подробнее с GAE можно ознакомиться тут: code.google.com/intl/ru/appengine
5. Подготовка приложения для развертывания
Чтобы не тратить время на описание процесса создания приложения Play! будем разворачивать приложение-пример из каталога /home/albert/play-1.2.1/modules/gae-1.4/samples-and-tests/lists-with-gae, которое поставляется вместе с модулем gae.
Так как приложение-пример создано с использованием устаревшей версии модуля siena, в конфигурационном /home/albert/play-1.2.1/modules/gae-1.4/samples-and-tests/lists-with-gae/conf/application.conf укажем путь к новой версии siena, для чего строку
module.siena=${play.path}/modules/siena-1.3
заменим на
module.siena=${play.path}/modules/siena-2.0.1
Убедимся, что приложение работает локально:
cd /home/albert/play-1.2.1/modules/gae-1.4/samples-and-tests/
/home/albert/play-1.2.1/play run lists-with-gae
При этом приложение запустится в режиме разработки (DEV mode) и мы сможем обратиться к нему по адресу localhost:9000/
6. Укажем идентификатор приложения AppEngine
В файле /home/albert/play-1.2.1/modules/gae-1.4/samples-and-tests/lists-with-gae/war/WEB-INF/appengine-web.xml
указываем идентификатор созданного в п. 4 приложения в на AppEngine
7. Выполним предкомпиляцию приложения
/home/albert/play-1.2.1/play precompile lists-with-gae
/home/albert/play-1.2.1/play war lists-with-gae -o /tmp/lists-with-gae.war
8. Собственно развертывание
/home/albert/appengine-java-sdk-1.5.1/bin/appcfg.sh update /tmp/lists-with-gae.war
Вводим email и пароль к учетной записи Google в которой мы создали приложение GAE и ждем пока завершится развертывание.
Также полностью развертывание (п. 7. и 8) можно выполнить одной командой:
/home/albert/play-1.2.1/play gae:deploy lists-with-gae --gae=/home/albert/appengine-java-sdk-1.5.1
9. Проверка работы приложения
Обращаемся по адресу нашего приложения (в примере appgoer.appspot.com ) и наблюдаем работающее приложение. Вместо appgoer следует указать ваш идентификатор.
На случай возникновения каких-либо трудностей все логи работы приложения доступны в админке GAE.