4

我正在尝试使用 capistrano 部署 play2 应用程序,但我不知道在成功部署后如何(重新)启动 play2 应用程序。只需触发“播放开始”就会导致进程挂起,等待我按 ctrl+D

我在播放应用程序根文件夹中创建了一个启动脚本

#!/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

3 回答 3

4

查看有关在生产环境中部署应用程序的播放文档

推荐的方法是打包你的应用程序

play clean compile stage

然后运行它

$目标/开始

要停止它,请查看文档:

服务器的进程 ID 在引导时显示并写入 RUNNING_PID 文件。要杀死正在运行的 Play 服务器,只需向进程发送 SIGTERM 以正确关闭应用程序即可。

在这个Openshift 快速入门中,它展示了另一种启动作为服务播放的方式以及如何停止它

基本上你做这样的事情开始:

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
于 2012-05-14T13:15:25.207 回答
2

Google 网上论坛上几乎没有关于运行应用程序的新鲜话题:

关注或加入他们是个好主意

于 2012-05-14T11:57:33.670 回答
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 注册服务。

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

于 2012-05-14T17:42:50.183 回答