Frage

Ich bin ein wenig verwirrt über meine Bereitstellungsstrategie hier. Bei der Bereitstellung unter welchen Umständen möchte ich eine senden reload signal an Einhorn?Zum Beispiel wäre es in meinem Fall so:

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

Ich habe meine Apps bereitgestellt, indem ich diese PID beendet und dann Unicorn über so etwas wie neu gestartet habe:

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

Ich frage mich nur, warum ich reload verwenden möchte?Kann ich dadurch Leistung für meine Bereitstellung gewinnen?

War es hilfreich?

Lösung

Wenn du Einhorn tötest, verursachst du Ausfallzeiten, bis Einhorn wieder starten kann.Wenn Sie das USR2-Signal verwenden, startet Unicorn zuerst neue Arbeiter, und sobald sie ausgeführt werden, werden die alten Arbeiter getötet.Im Grunde geht es darum, die Notwendigkeit zu beseitigen, Einhorn "auszuschalten".

Beachten Sie, dass davon ausgegangen wird, dass Sie das Dokumentierte haben before_fork haken Sie Ihre Einhornkonfiguration ein, um das Töten der alten Arbeiter zu bewältigen, sollte ein ".oldbin" -Datei gefunden werden, die die PID des alten Unicorn-Prozesses enthält:

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top