【问题标题】:capistrano 3.5 execute task how catch non zero resultcapistrano 3.5 执行任务如何捕获非零结果
【发布时间】:2016-06-26 13:18:10
【问题描述】:

以下任务在 deploy.rb 中,它在服务器上执行两个 shell 脚本。

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

如何检查这些脚本之一是否失败(返回非零值)并采取适当的措施?我想要做的是停止执行并显示错误消息。

【问题讨论】:

    标签: deployment task capistrano


    【解决方案1】:

    您可能已经知道,execute 会在检测到非零退出状态时自动引发异常并停止部署。这种行为通常“足够好”,只要您始终期望命令会成功执行,任何失败都意味着发生了非常糟糕的事情。

    但是,如果您不确定某个命令是成功还是失败,并且希望优雅地处理失败的情况,请使用test 而不是execute

    test 将根据退出状态返回一个布尔值。如果退出状态为零(即成功),则返回true;对于非零,它将返回 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() 命令的行为与 execute 完全相同,但是如果命令以非零退出方式退出(如 man 1 test 所做的那样),则会返回 false。当它返回布尔值时,它可用于指导块内的控制流。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-20
      • 1970-01-01
      • 2016-02-23
      • 1970-01-01
      • 1970-01-01
      • 2017-05-31
      • 1970-01-01
      相关资源
      最近更新 更多