Question

Je suis un peu confus à propos de ma stratégie de déploiement ici, lors du déploiement dans quelles circonstances je voudrais envoyer un reload signal à la licorne? Par exemple, dans mon cas, ce serait comme:

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

J'ai déployé mes applications en tuant ce PID, puis en recommençant à la licorne via quelque chose comme:

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

Je me demande juste pourquoi je voudrais utiliser Recharger? Puis-je obtenir des performances pour mon déploiement en le faisant?

Était-ce utile?

La solution

Lorsque vous tuez la licorne, vous provoquez des temps d'arrêt, jusqu'à ce que la licorne puisse recommencer. Lorsque vous utilisez le signal USR2, Unicorn commence d'abord de nouveaux travailleurs, puis une fois qu'ils courent, il tue les anciens travailleurs. Il s'agit essentiellement de supprimer la nécessité de "désactiver" la licorne.

Remarque, l'hypothèse est que vous avez le document before_fork Crochet dans votre configuration de la licorne, afin de gérer le meurtre des anciens travailleurs, si un fichier ".oldbin" était trouvé, contenant le PID de l'ancien processus de la licorne:

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top