2012-01-10 17 views
5

Tôi có capistrano được cấu hình để triển khai trên ba máy chủ vật lý. Tôi muốn cấu hình nhiệm vụ khởi động lại để tuần tự đi đến mỗi máy chủ và khởi động lại ứng dụng chứ không phải là cách mặc định đi đến tất cả các máy chủ cùng một lúc.capistrano sequential restart

Dưới đây là nhiệm vụ triển khai hiện tại:

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 

Tôi đang nghĩ đến một cái gì đó như thế này:

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

Bất kỳ ý tưởng?

Trả lời

5

tôi làm điều gì đó rất giống nhau bằng cách sử dụng biến HOSTFILTER môi trường, mà hiệu quả phạm vi tất cả mọi thứ để các host phù hợp với bộ lọc.

Something như

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

nên làm các trick.

Các vấn đề liên quan