Capistrano一次部署一台服务器

时间:2017-07-21 10:52:04

标签: ruby-on-rails ruby-on-rails-4 deployment capistrano capistrano3

我正在使用capistrano进行RAILS部署。我们希望首先部署到一个服务器,并在第一个服务器上完成部署之后,然后我们要在第二个服务器上开始部署。我们不希望延迟重启。我们希望一次完成一个部署。到目前为止,我有这个:

namespace :deploy do
  task :sequence do
    on roles(:app), in: :sequence do |host|
      invoke 'deploy'
    end
  end
end

问题在于invoke 'deploy' 它为所有应用服务器调用deploy,这些服务器又并行部署。

最后如何为特定主机调用部署任务?

2 个答案:

答案 0 :(得分:1)

以下内容可帮助您以顺序模式运行deploy任务:

task :my_task, roles: :web do
  find_servers_for_task(current_task).each do |server|
    run "YOUR_COMMAND", hosts: server.host
  end
end

答案 1 :(得分:1)

如果我有这个要求,我可能会编写脚本。您可以使用--hosts参数运行Capistrano,以定义您在舞台文件(config/deploy/dev|stage|prod|somethingelse.rb)中描述的实际上要执行命令的服务器。这可以采取两种形式。让我们说我有三台服务器,test1,test2和prod1。我可以使用列表运行它,例如cap prod --hosts=test1,test2 deploy,只有test1和test2将接收部署。您还可以使用正则表达式来实现相同的功能,例如cap prod --hosts=^test deploy

此处记录了这些内容:http://capistranorb.com/documentation/advanced-features/host-filtering/

考虑到这一点,我可能会写一个运行capistrano N次的脚本(或Makefile),每次都运行一个不同的服务器。