capistrano顺序重启

时间:2012-01-10 20:50:34

标签: ruby-on-rails capistrano

我将capistrano配置为跨三个物理服务器进行部署。我想配置重启任务以顺序转到每个服务器并重新启动应用程序,而不是一次性转到所有服务器的默认方式。

以下是当前的部署任务:

namespace :deploy do

  task :start, :roles => :app, :except => { :no_release => true } do 
    run "cd #{current_path} && bundle exec unicorn_rails -c #{current_path}/config/unicorn.rb -E #{rails_env} -D"
  end

  task :stop, :roles => :app, :except => { :no_release => true } do 
    run "kill `cat #{current_path}/tmp/pids/unicorn.pid`"
  end

  task :restart, :roles => :app, :except => { :no_release => true } do
    stop
    sleep(10)
    start
  end

end

我在想这样的事情:

#this does not work 
task :sequential_restart do
   find_servers(:roles => :app).each
    restart
   end
 end

任何想法?

1 个答案:

答案 0 :(得分:5)

我使用HOSTFILTER环境变量执行非常类似的操作,它有效地将所有内容范围限定在与过滤器匹配的主机上。

这样的东西
find_servers(:roles => :app).each do |server|
  ENV['HOSTFILTER'] = server.host
  restart
end
ENV['HOSTFILTER'] = nil

应该这样做。