Статьи

Устранение неполадок приложений Play Framework 2 в Openshift

Устранение неполадок Openshift
 

С приложением типа « сделай сам » вы действительно получаете большую свободу поддержки практически любой платформы или сервера, которые можно собрать и запустить на Linux-коробке. Но вы должны сделать свою домашнюю работу и сделать некоторые исследования.
В этой статье я покажу вам пару советов, которые я изучил, играя с Openshift и Play Framework .
Комментарии более чем приветствуются, поэтому я надеюсь, что вы также можете дать мне еще несколько советов, которые помогут нам всем запустить наши приложения в облаке.
Предоставление встроенной поддержки приложения Play Framework
 
В настоящее время решение, которое мы нашли для развертывания приложений Play 2.0 в openshift , довольно удобно, но мы могли бы сделать его немного лучше …
Проблема в том, что мы должны скомпилировать приложение локально (запустить этап воспроизведения ), а затем отправить 30 МБ библиотек в Openshift. Идеальная вещь, и это то, что мы сделали с быстрым стартом Play 1.x и с последней версией модуля Openshift для Play Framework 1.x , — это просто загрузить наши исходники, а затем позволить Openshift загрузить и установить Play, скомпилировать наше приложение и начать это.
К сожалению, мы столкнулись с некоторыми ограничениями памяти (кажется, что компиляция приложений Play 2 требует немного памяти), что в конечном итоге вызвало некоторые проблемы. Мы пытаемся решить их, но, возможно, с помощью этих советов вы могли бы помочь устранить неполадки.
Благодаря открытому ресурсу Openshift и новому livecd Origin у нас появилось больше инструментов для дальнейшего изучения происходящего, у меня просто не было времени, чтобы начать с ним играть.
Итак, достаточно болтовни, и давайте запачкаем руки.
Хьюстон у нас проблема
 
Хорошо, вы только что прочитали это руководство или выполнили наши шаги на вебинаре Play Framework с помощью этого краткого руководства по Play 2.0 (на самом деле, некоторые из этих советов помогут устранить проблемы при запуске любого приложения, работающего в Openshift), и что-то пошло не так.
Прежде всего, посмотрите журналы. Просто выпуск
1
rhc app tail -a myapp -l [email protected] -p mysecretpass
Оставьте это окно открытым, оно станет очень удобным позже.
Тогда мы будем ssh в нашу удаленную машину. Просто выпустите:
1
rhc app show -a myapp -l [email protected] -p mysecretpass
и вы получите что-то вроде
01
02
03
04
05
06
07
08
09
10
11
Application Info
================
contacts
    Framework: diy-0.1
     Creation: 2012-04-19T14:20:16-04:00
         UUID: 0b542570e41b42e5ac2a255c316871bc
      Git URL: ssh://0b542570e41b42e5ac2a255c316871bc@myapp-mylogin.rhcloud.com/~/git/myapp.git/
   Public URL: http://myapp-mylogin.rhcloud.com/
 
 Embedded:
      None
Примите участие после ssh в Git URL и войдите в систему openshift:
(Если вы ленивы, как я, продолжайте и проголосуйте за более простой способ ssh в openshift )
Также неплохо открыть другое командное окно, запустить ssh в openshift и запустить что-то вроде «top» или «watch -n 2 free -m», чтобы следить за использованием памяти.
Устранение неполадок Play
 
Вы знаете старый девиз «пиши один раз, беги везде»… ну, он просто «должен» работать, но на всякий случай ты можешь попробовать собрать приложение с той же версией JDK, что и в openshift.
Просто беги
1
2
3
4
java -version
java version "1.6.0_22"
OpenJDK Runtime Environment (IcedTea6 1.10.6) (rhel-1.43.1.10.6.el6_2-i386)
OpenJDK Server VM (build 20.0-b11, mixed mode)
И установите ту же версию JDK на свой ящик. Затем скомпилируйте ваше приложение и повторите развертывание (вы можете использовать вспомогательный скрипт openshift_deploy )
Если это не сработает, попробуйте выполнить весь процесс вручную в Openshift. Вы должны сделать что-то вроде этого:
01
02
03
04
05
06
07
08
09
10
11
# download play
cd ${OPENSHIFT_DATA_DIR}
curl -o play-2.0.1.zip http://download.playframework.org/releases/play-2.0.1.zip
unzip play-2.0.1.zip
cd ${OPENSHIFT_REPO_DIR}
 
#stop app
.openshift/action_hooks/stop
 
#clean everything - watch for errors, if it fails retry a couple more times
${OPENSHIFT_DATA_DIR}play-2.0.1/play clean
если вы получите что-то вроде:
1
/var/lib/stickshift/0b542570e41b42e5ac2a255c316871bc/myapp/data/play-2.0.1/framework/build: line 11: 27439 Killed
Это означает, что он с треском провалился (это проблема памяти, о которой я говорил)
И это настолько плохая ошибка, что вы также потеряете командную строку. Просто вслепую наберите «reset» и нажмите «Enter», вы получите ответ.
А потом просто попробуйте еще раз …
Вы также можете получить это сообщение:
1
2
This project uses Play 2.0!
Update the Play sbt-plugin version to 2.0.1 (usually in project/plugins.sbt)
Это означает, что вы создали приложение в Play 2.0 и теперь пытаетесь скомпилировать его с другой версией.
Просто обновите файл project / plugins.sbt или загрузите соответствующую версию.
Теперь скомпилируйте и создайте приложение.
1
2
3
4
5
#compile everything - watch for errors, if it fails retry a couple more times
${OPENSHIFT_DATA_DIR}play-2.0.1/play compile
 
#stage - watch for errors, if it fails retry a couple more times
${OPENSHIFT_DATA_DIR}play-2.0.1/play stage
Затем запустите его (не стесняйтесь и взгляните на сценарии хуков действия в репозитории быстрого старта ).
1
target/start -Dhttp.port=8080 -Dhttp.address=${OPENSHIFT_INTERNAL_IP} -Dconfig.resource=openshift.conf
Проверьте это на https://myapp-mylogin.rhcloud.com
Если все работает нормально, просто остановите его с помощью ctrl-c, а затем запустите:
1
.openshift/action_hooks/start
Вы должны увидеть, как ваше приложение запускается в консоли с файлами журналов.
Теперь вы можете выйти из сеанса ssh с помощью ctrl-d и выполнить:
1
rhc app restart -a myapp -l [email protected] -p mysecretpass
и вы должны увидеть что-то вроде
1
2
3
4
5
6
7
Stopping play application
Trying to kill proccess, attempt number 1
kill -SIGTERM 19128
/var/lib/stickshift/0b542570e41b42e5ac2a255c316871bc/openbafici/repo/target/start "-DapplyEvolutions.default=true" -Dhttp.port=8080 -Dhttp.address=127.11.189.129 -Dconfig.resource=openshift.conf
Play server process ID is 21226
[info] play - Application started (Prod)
[info] play - Listening for HTTP on port 8080...
Я надеюсь, что эти советы станут полезными. Как я уже сказал, я с нетерпением жду начала играть с livecd Openshift Origin, а затем я расскажу вам об этом.
А пока я оставлю тебя в компании старого доброго ракетного медведя Openshift, я знаю, что ты тоже по нему скучаешь, так почему бы не вернуть его ?
Справка: Устранение неполадок с приложениями Play Framework 2 для Openshift от нашего партнера по JCG Себастьяна Скарано на платформе « Развлекайся с Play»! блог.