Openshift故障排除
使用“ 自己动手”应用程序类型,您实际上可以有很大的自由度来支持几乎可以在Linux机器上构建和运行的任何框架或服务器。
但是您必须做功课,并做一些研究。
因此,在本文中,我将向您展示一些我在使用Openshift和Play Framework方面学到的技巧。
欢迎发表评论,所以我希望您也可以向我提供更多提示,以帮助我们所有人在云上运行我们的应用程序。
为播放框架应用程序提供本机支持
目前,我们发现用于在openshift上部署Play 2.0应用程序的解决方案非常方便,但是我们可以做得更好。
问题是我们必须在本地编译该应用程序(发出play stage ),然后将30 MB的库推入Openshift。
理想的事情就是使用Play 1.x快速入门和适用于Play Framework 1.x的Openshift模块的最新版本进行的工作,就是上传我们的源代码,然后让Openshift下载并安装Play,编译我们的应用程序,然后启动它。
不幸的是,我们遇到了一些内存限制(似乎编译Play 2应用程序有点内存需求)最终导致了一些问题。
我们正在努力解决它们,但是也许,有了这些技巧,您可以帮助解决问题。
因此,chat不休,让我们动手吧。
休斯顿,我们有一个问题
好的,您刚刚阅读了本指南,或者使用Play 2.0快速入门在Play Framework网络研讨会上按照我们的步骤进行了操作(实际上,其中一些技巧将有助于排除在Openshift上运行的任何应用程序的故障),并且出现了问题。
首先,看看日志。
刚发行
rhc app tail -a myapp -l mylogin@openshift.com -p mysecretpass
将该窗口保持打开状态,以后将变得非常方便。
然后,我们将SSH到我们的远程计算机中。
只是发出:
rhc app show -a myapp -l mylogin@openshift.com -p mysecretpass
你会得到像
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 96e487d1d4a042f8833efc696604f1e7@myapp-mylogin.rhcloud.com
(如果您像我一样懒惰,请继续投票以更轻松地将其转换为openshift )
打开另一个命令窗口,将ssh切换到openshift并运行诸如“ top”或“ watch -n 2 free -m”之类的内容来监视内存使用也是一个好主意。
排除播放故障
您知道一个古老的座右铭:“编写一次,到处运行”……好吧,它只是“应该”工作,但以防万一,您可以尝试使用与在openshift上运行的JDK版本相同的JDK版本来编译您的应用程序。
赶紧跑
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上手动完成整个过程。
您应该执行以下操作:
# 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
如果您得到以下信息:
/var/lib/stickshift/0b542570e41b42e5ac2a255c316871bc/myapp/data/play-2.0.1/framework/build: line 11: 27439 Killed
这意味着它不幸失败了(这是我告诉过您的内存问题)
这是一个很糟糕的错误,您还会松开命令提示符。
只是盲目地输入“ reset”并按Enter,您将得到提示。
然后再试一次...
您可能还会收到以下消息:
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文件或下载适当的版本。
现在编译并上演您的应用程序。
#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
然后运行它(不要害羞,看看quickstart repo上的action hooks脚本 )。
target/start -Dhttp.port=8080 -Dhttp.address=${OPENSHIFT_INTERNAL_IP} -Dconfig.resource=openshift.conf
在https://myapp-mylogin.rhcloud.com上进行检查
如果一切正常,请使用ctrl-c停止它,然后运行:
.openshift/action_hooks/start
您应该在控制台中看到带有日志文件的应用程序
现在,您可以使用ctrl-d从ssh会话注销,然后发出:
rhc app restart -a myapp -l mylogin@openshift.com -p mysecretpass
你应该看到类似
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...
希望本技巧对您有所帮助。
正如我所说的,我很期待开始使用Openshift Origin livecd,然后再告诉您。
在此期间,我将陪伴您与老旧的Openshift Rocket Bear陪伴,我知道您也想念他,那么为什么不让他回来呢?
翻译自: https://www.javacodegeeks.com/2012/05/troubleshooting-play-framework-2-apps.html