如果任务失败,如何让Capistrano不回滚

Tra*_*Guy 34 capistrano

我们正在使用Capistrano/Webistrano(与Lee Hambley的无轨部署宝石)将我们的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
Run Code Online (Sandbox Code Playgroud)

chr*_*ton 33

Capistrano任务文档,如果有错误,可以添加一个配置,继续.

task :solr_start, :on_error => :continue do
    # your code here
end
Run Code Online (Sandbox Code Playgroud)

只需将其添加到要忽略错误的每个任务,然后继续.尽管如此,最好的办法是看看你是否可以弄清楚导致失败的原因,并让restart命令更加强大,以便真正重新启动它.我只说这个,因为当你试图将脚本交给其他人时,他们可能不知道如何判断它是否正确重启.

  • 一种检查状态的方法:运行`cap -d deploy`.-d用于"调试",这意味着Capistrano将在执行每个任务之前暂停,并要求您继续或中止.当你到达你想要调试的命令时,根本不回答提示,打开一个新的终端选项卡/窗口并SSH到你的部署服务器并进行调试:) (37认同)
  • 还有另一种方法吗?如果你想停止错误并检查状态怎么办? (7认同)
  • 我怎样才能为Capistrano v3做这个? (3认同)