Use `recarregar` em vez de `restart` para o Unicórnio?
Pergunta
Eu estou um pouco confuso sobre o meu implantar a estratégia, ao implantar, em que circunstâncias eu gostaria de enviar uma reload
sinal de unicórnio?Por exemplo no meu caso seria assim:
sudo kill -s USR2 `cat /home/deploy/apps/my_app/current/tmp/pids/unicorn.pid`
Eu tenho implantação de meus apps pelo assassinato que pid, em seguida, a partir do unicórnio novamente através de algo como:
bundle exec unicorn -c config/unicorn/production.rb -E production -D
Eu só estou perguntando por que eu iria querer usar recarregar?Posso ganho de desempenho para o meu implantação fazendo isso?
Solução
Quando você matar o unicórnio você causar tempo de inatividade, até o unicórnio pode iniciar o backup.Quando você usa o USR2 sinal, unicórnio inicia novos trabalhadores de primeira e, em seguida, uma vez que eles estão executando, ele mata o velho trabalhadores.É basicamente tudo sobre a remoção a necessidade de se "desligar" do unicórnio.
Nota, o pressuposto é que você tem documentado before_fork
gancho em seu unicórnio de configuração, a fim de lidar com a morte do velho trabalhadores, deve um ".oldbin" arquivo ser encontrado, que contém o PID do antigo unicórnio processo:
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