2016-06-26 5 views
0

次のタスクは、サーバー上で2つのシェルスクリプトを実行するdeploy.rbにあります。capistrano 3.5実行タスクどのように非ゼロ結果をキャッチ

task :setup_nginx do 
    on roles(:app) do 
    execute "sudo /usr/local/sbin/setup_nginx.sh" 
    execute "sudo /usr/local/sbin/ctl_nginx.sh restart" 
    end 
end 

どのように私はこれらのスクリプトのいずれかに障害が発生したかどうかを確認(ゼロ以外の値を返す)と良いと考え行動を取ることができますか?私がしたいのは、エラーメッセージで実行を停止することです。

答えて

1

既にご存じのように、executeは自動的に例外を発生させ、非ゼロの終了ステータスが検出された場合は展開を停止します。コマンドが正常に実行されることが常に期待される限り、この動作は通常「十分に良い」ものであり、何らかのエラーが発生した場合、非常に悪いことが起こります。

ただし、コマンドが成功するか失敗するかわからない場合は、正常に処理する場合は、executeの代わりにtestを使用してください。

testは、終了ステータスに基づいて真偽値を返します。終了ステータスがゼロ(成功)の場合は、trueを返します。 0以外の場合はfalseを返します。例えば

task :setup_nginx do 
    on roles(:app) do 
    if test "sudo /usr/local/sbin/setup_nginx.sh" 
     # do something on success 
    else 
     # do something different on failure 
    end 
    end 
end 

ドキュメント:

https://github.com/capistrano/sshkit/blob/master/EXAMPLES.md#make-a-test-or-run-a-command-which-may-fail-without-raising-an-error

test()コマンドはfalseを返しますが、実行とまったく同じ動作であればゼロ以外の終了でコマンドが終了(man 1 testのように)。ブール値を返すので、ブロック内で制御フローを指示するために使用できます。

関連する問題