如何在脚本失败(错误)时继续并使用Capistrano 3捕获输出

时间:2014-01-14 20:59:23

标签: ruby deployment capistrano capistrano3 sshkit

在Capistrano 2.x中你可以简单地添加:on_error => :继续这样:

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

我尝试围绕开始/救援块中的新方法,但这只会阻止它出错,但它不会从错误中返回输出。

我仍然想知道如何做到这一点,但我找到了解决一个案例需要它的方法,那就是如果失败就设置服务器。

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

这假设它只在关机发生时出错。

1 个答案:

答案 0 :(得分:0)

capture的输出只有在该方法没有失败时才会返回。如果它引发异常,则无法返回值(因为异常处理将采取控制)。因此,为了从捕获命令获得一些响应,您需要它作为引发异常的一部分返回您需要的值,或者不引发异常,并且只返回错误代码(加上您的数据)需要获得)。