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ì?

È stato utile?

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
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top