2012-02-29 18 views
5

Dağıtım stratejim hakkında biraz kafam karıştı mı, ne zaman hangi koşullar altında dağıtmak için unicorn bir reload sinyali göndermek istiyorum? Sadece nedenini merak ediyorumUnicorn için 'restart' yerine `reload` kullanın.

bundle exec unicorn -c config/unicorn/production.rb -E production -D 

: Ben gibi bir şey aracılığıyla sonra yine tek boynuzlu başlayarak o pid öldürerek benim uygulamaları dağıtma oldum

sudo kill -s USR2 `cat /home/deploy/apps/my_app/current/tmp/pids/unicorn.pid` 

: gibi benim durumumda Örneğin olurdu Yeniden yüklemeyi kullanmak ister miydim? Dağıtımım için herhangi bir performans gösterebilir miyim?

cevap

14

Tek boynuzlu atı öldürdüğünüzde, tek boynuzlu atlar tekrar başlayabilene kadar kesintiye neden olur. USR2 sinyalini kullandığınızda, tek boynuzlu at ilk önce yeni işçileri çalıştırır, sonra koştuktan sonra, eski işçileri öldürür. Temel olarak tek boynuzlu atı "kapatma" ihtiyacını ortadan kaldırmaktır.

Not: Eski işçilerin öldürülmesiyle başa çıkmak için, eski tek boynuzlu at işleminin PID'sini içeren bir ".oldbin" dosyası bulunmalıdır, tek boynuzlu atı yapılandırmanızda belgelenmiş before_fork kancaya sahip olduğunuzu varsayın. :

before_fork do |server, worker| 
    # a .oldbin file exists if unicorn was gracefully restarted with a USR2 signal 
    # we should terminate the old process now that we're up and running 
    old_pid = "#{pids_dir}/unicorn.pid.oldbin" 
    if File.exists?(old_pid) 
    begin 
     Process.kill("QUIT", File.read(old_pid).to_i) 
    rescue Errno::ENOENT, Errno::ESRCH 
     # someone else did our job for us 
    end 
    end 
end 
İlgili konular