Usa `ricaricare il` invece di` Riavvio` per Unicorn?
Domanda
Sono un po 'confuso sulla mia strategia di implementazione qui, quando si distribuisce in quali circostanze vorrei inviare un segnale reload
a Unicorn?Ad esempio, nel mio caso sarebbe come:
sudo kill -s USR2 `cat /home/deploy/apps/my_app/current/tmp/pids/unicorn.pid`
.
Ho schierando le mie app uccidendo quella PID, quindi inizia a iniziare nuovamente un unicorno tramite qualcosa come:
bundle exec unicorn -c config/unicorn/production.rb -E production -D
.
Mi sto solo chiedendo perché vorrei usare Ricarica?Posso ottenere qualsiasi performance per il mio implementazione facendo così?
Soluzione
Quando uccidi Unicorno, causi tempi di fermo, fino a quando Unicorn è possibile ricominciare.Quando usi il segnale USR2, Unicorn inizia prima i nuovi lavoratori, poi una volta che sono in esecuzione, uccide i vecchi lavoratori.Fondamentalmente tutto riguardante la rimozione della necessità di "spegnere" Unicorno.
Nota, l'ipotesi è che si dispone del gancio di before_fork
documentato nella configurazione del tuo unicorno, al fine di gestire l'omicidio dei vecchi lavoratori, dovrebbe essere trovato un file ".oldbin", contenente il PID del vecchio processo unicorno:
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
.