4

capistranoを使用してplay2アプリケーションをデプロイしようとしていますが、デプロイが成功した後、play2アプリケーションを(再)起動する方法がわかりません。'play start'をトリガーするだけで、プロセスがハングし、Ctrl+Dを押すのを待っています。

Playアプリのルートフォルダーに開始スクリプトを作成しました

#!/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ドキュメントをご覧ください

推奨される方法は、アプリを次のようにパッケージ化することです。

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という名前の単純なシェルスクリプトを作成し、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 に答える