2012-05-14 68 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

相关问题