Capistrano 2.x では、次のように :on_error => :continue を追加するだけです。
task :bad_script, :on_error => :continue do
my_error = capture('/path/to/tomcat/shutdown.sh')
end
Capistrano 3.x または ssh-kit (基礎となる通信) でこれを行う方法がわかりません。
task :bad_script do
server_is_down
on roles :all do
begin
server_is_down = capture('/path/to/tomcat/shutdown.sh')
rescue
#do something if server_is_down has the correct text
end
end
end
end
begin/rescue ブロックで新しい方法を囲んでみましたが、エラーが発生するのを止めるだけで、エラーからの出力は返されません。
私はまだこれを行う方法を知りたいのですが、私の1つのケースでそれを必要とする回避策を見つけました。それは、サーバーが失敗した場合にサーバーを停止させることです。
task :bad_script do
server_is_down = false
on roles :all do
begin
execute('/path/to/tomcat/shutdown.sh')
rescue
server_is_down = true
end
end
end
end
これは、シャットダウンが発生したときにのみエラーになると想定しています。