2012-01-10 25 views
5

Tengo capistrano configurado para implementar en tres servidores físicos. Me gustaría configurar la tarea de reinicio para ir secuencialmente a cada servidor y reiniciar la aplicación en lugar de la forma predeterminada de ir a todos los servidores a la vez.capistrano reinicios secuenciales

Aquí es la tarea de despliegue actual:

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 

Pienso en algo como esto:

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

alguna idea?

Respuesta

5

Hago algo muy similar usando la variable de entorno HOSTFILTER, que efectivamente abarca todo en los hosts que coinciden con el filtro.

Algo así como

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

debe hacer el truco.