如何使用capistrano在远程计算机上启动play2应用程序

时间:2012-05-14 11:33:37

标签: scala capistrano playframework-2.0

我正在尝试使用capistrano部署play2应用程序,但在成功部署后我无法弄清楚如何(重新)启动play2应用程序。只是触发“播放开始”将导致进程挂起,等待我按ctrl + D

我在play app根文件夹

中创建了一个启动脚本
#!/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?

3 个答案:

答案 0 :(得分:4)

查看deploying your application on production

上的播放文档

推荐的方法是使用

打包您的应用
play clean compile stage

然后用

运行它

$ target / start

要停止它,请查看文档:

  

服务器的进程ID显示在bootstrap并写入   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

答案 1 :(得分:2)

关于在Google网上论坛中运行应用程序的新主题很少:

跟随或加入他们是个好主意

答案 2 :(得分:1)

我建议使用runit。我们目前正在生产中运行一系列服务,效果很好。

它只涉及创建一个名为run的简单shell脚本,将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注册该服务。

在部署时,我们停止服务,更改二进制文件并启动服务;这很简单。