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應用程序有點內存需求)最終導致了一些問題。 我們正在努力解決它們,但是也許,有了這些技巧,您可以幫助解決問題。
通過Openshift的開源和新的Origin livecd,我們可以使用更多工具來進一步研究正在發生的事情,我只是沒有時間開始玩它。
因此,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
================
contactsFramework: diy-0.1Creation: 2012-04-19T14:20:16-04:00UUID: 0b542570e41b42e5ac2a255c316871bcGit 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陪伴,我知道您也想念他,那么為什么不讓他回來呢?
參考: 故障排除播放框架上Openshift 2個應用程序從我們JCG伙伴塞巴斯蒂安斯卡拉諾在享受樂趣與游戲框架! 博客。
翻譯自: https://www.javacodegeeks.com/2012/05/troubleshooting-play-framework-2-apps.html