定義済みの:app
ロール内で実行する必要のあるカピストラのタスクをいくつか構築しました。これは私がこれまで持っているものです。Capistranoのタスクは、指定されたスコープ内で実行されません。
desc "Stop unicorn"
task :stop, :roles => :app do
logger.info "Stopping unicorn server(s).."
run "touch #{unicorn_pid}"
pid = capture("cat #{unicorn_pid}").to_i
run "kill -s QUIT #{pid}" if pid > 0
end
は、私の知る限りでは、これは正しい、:app
役割に与えられたサーバ上の指定したコマンドを実行する必要がありますか?しかし、問題は、:db
の役割のサーバー上でコマンドを実行しているということです。
誰でもこの問題を理解することはできますか?または、カプリストラノに:roles
フラグを強制的に適用させる方法はありますか?キャプチャを使用して、事前
//エミル
もう少し調査したところ、このタスクに至るまでに 'servers'配列にはすべての役割のすべてのサーバーが含まれています(つまり、' app'、 web'と 'db')はこの期待された振る舞いですか? –
さらに詳しく。キャプチャコマンドはすべてのサーバーで実行され、次にすべてのサーバーでkillコマンドが実行されるようです。これにより、killコマンドはすべてのサーバー上の最後のサーバーのIDを強制終了しようとします。この場合、サーバー配列を反復する前に、特定のサーバーで一連のコマンドを実行するのがベストプラクティスですか? –
あなたの環境はどのように役割を設定していますか? – phoet