2012-01-10 90 views
5

我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 

什么想法?

回答

5

我做的非常相似使用HOSTFILTER环境变量,有效作用域的一切信息进行过滤主机的东西。

喜欢的东西

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

应该做的伎俩。