【问题标题】:How to have Capistrano NOT rollback if a task fails如果任务失败,如何让 Capistrano 不回滚
【发布时间】:2011-06-15 12:18:33
【问题描述】:

我们正在使用 Capistrano/Webistrano(与 Lee Hambley 的 railsless-deploy gem)将我们的 PHP 应用程序推送到生产服务器。我有一些自定义任务会在部署过程的各个部分运行。

例如,我有一些任务会尝试停止和重新启动 jetty solr 实例。然而,有时这个位在部署过程中会失败,因此 Capistrano 会回滚整个部署并恢复到以前的版本。这是一种痛苦。 :-)

我想告诉 Capistrano 忽略这些任务的返回结果,因此,如果它们失败,Capistrano 将继续按原样进行并完成部署。事后我很容易通过 ssh 连接到服务器并正确地终止并重新启动 solr 实例,而不必再次进行完整的部署。

这是部署脚本的一些相关部分:

before "deploy:symlink", :solr_kill
after "deploy:symlink", :solr_start, :solr_index

task :solr_kill do
    run "cd #{current_path}/Base ; #{sudo} phing solr-kill"
end

task :solr_start do
    run "cd #{current_path}/Base ; #{sudo} phing solr-start"
    run "sleep 10"
end

task :solr_index do
    run "#{sudo} #{current_path}/Base/Bin/app.php cron run solr_index_cron"
end

【问题讨论】:

    标签: capistrano


    【解决方案1】:

    Capistrano Task docs 有一个配置,如果出现错误,您可以添加到继续。

    task :solr_start, :on_error => :continue do
        # your code here
    end
    

    只需将其添加到您要忽略错误并继续的每个任务中。不过,最好的办法是看看您是否可以找出导致故障的原因,并让 restart 命令更强大以真正重新启动它。我只这么说,因为当您尝试将脚本交给其他人时,他们可能不知道如何判断它是否正确重启。

    【讨论】:

    • 谢谢,克里斯。我的任务永远是一项正在进行的工作,但这会有所帮助,直到我有机会慢慢改进它们以更好地处理错误。
    • 还有其他方法吗?如果您想停止错误并检查状态怎么办?
    • 一种检查状态的方法:运行cap -d deploy。 -d 用于“调试”,这意味着 Capistrano 将在执行每个任务之前暂停并要求您继续或中止。当您到达要调试的命令时,根本不回答提示,打开一个新的终端选项卡/窗口和 SSH 到您的部署服务器并进行调试:)
    • Capistrano v3 如何做到这一点?
    猜你喜欢
    • 2011-01-27
    • 1970-01-01
    • 2021-06-05
    • 1970-01-01
    • 2011-07-20
    • 1970-01-01
    • 2013-05-14
    • 1970-01-01
    • 2011-01-15
    相关资源
    最近更新 更多