2012-05-14 64 views
4

我正在嘗試部署capistrano的play2應用程序,但我無法弄清楚如何在重新啓動play2應用程序後成功進行部署。剛觸發「播放開始」會導致進程掛等我按ctrl + d如何使用capistrano在遠程計算機上啓動play2應用程序

我創建的播放應用程序的根文件夾啓動腳本

#!/bin/bash 

nohup bash -c "/var/lib/play2/play start &>> /tmp/myapp.log 2>&1" &> /dev/null & 

它的偉大工程,當我在服務器上運行它。當我嘗試通過ssh從本地機器調用它時,它也可以工作。但是當我使用capistrano時,它似乎沒有做任何事情。我Capistrano的配置是這樣的:

namespace :deploy do 

    task :restart do 
    stop 
    sleep 1 
    start 
    end 

    task :start do 
    run "cd #{current_release}/trip-api && ./start.sh" 
    end 

    task :stop do 
    run "cd #{current_release}/trip-api && ./stop.sh" 
    end 
end 

什麼是啓動遠程機器上的應用play2最好的方式?如何讓它與capistrano合作?

回答

4

看一看好主意播放文檔deploying your application on production

推薦的方法是用

play clean compile stage 

打包你的應用程序,然後用

$目標運行/啓動

要停止它,看看文檔:

服務器的進程標識顯示在引導程序中並寫入 RUNNING_PID文件。要殺死正在運行的Play服務器,只需將 SIGTERM發送到正確關閉應用程序的進程即可。

在這種quickstart for Openshift,它顯示了另一種方式來start play as a service以及如何stop it

基本上你做這樣的事情開始:

APP_COMMAND="${OPENSHIFT_REPO_DIR}target/start $PLAY_PARAMS "\ 
"-Dhttp.port=${OPENSHIFT_INTERNAL_PORT} "\ 
"-Dhttp.address=${OPENSHIFT_INTERNAL_IP} "\ 
"-Dconfig.resource=openshift.conf" 

echo $APP_COMMAND &>> $LOG_FILE 
nohup bash -c "${APP_COMMAND} &>> ${LOG_FILE} 2>&1" &> /dev/null & 

,並阻止它

pid=`cat RUNNING_PID` 
echo "Stopping play application" >> $LOG_FILE 
kill -SIGTERM $pid 
+0

感謝您的澄清,但它不能解決我的問題。這在我在服務器上本地運行時起作用,但由於某種原因,我無法遠程觸發它(例如,用capistrano) –

+0

我根據您的建議使其工作(請參閱https://gist.github.com/2769718)該解決方案不是使用capistrano的默認版本+符號鏈接(當前)目錄結構,因爲RUNNING_PID文件將保留在發行版的舊子目錄中,並且腳本無法停止該應用程序。 我會將此標記爲答案,因爲我認爲這是部署播放應用程序的最佳方式。 –

1

我會用runit建議。我們目前正在運行一系列生產服務,並且效果很好。

它只涉及創建一個名爲run的簡單shell腳本,將runit指向其包含的目錄,然後啓動它。服務不應該自行守護,並且runit控件pid文件等。

有一個命令(sv)來啓動,停止和查詢服務。(sv start|stop|status|restart yourapp)。

一個粗略的谷歌搜索讓我這http://rubygems.org/gems/capistrano-runit雖然我根本不使用capistrano,所以我不能擔保它的實用性。

http://smarden.org/runit/

的常見問題是最好的地方開始:http://smarden.org/runit/faq.html

在Debian中你只是apt-get install runit和是好去。 update-service --add /your/service/dir/將用runit註冊服務。

部署時,我們停止服務,更改二進制文件並啓動服務;它非常簡單。

+0

聽起來像一個可行的解決方案,但我的問題對於播放應用程序非常具體。我會嘗試,如果我可以得到它與runit的工作。 –

+0

它適用於任何類型的應用程序。如果你成功了,請回復你的經歷。 – fedesilva

相關問題