Ein Neustart von Unicorn mit USR2 scheint die Einstellungen von Production.rb nicht neu zu laden
-
28-10-2019 - |
Frage
Ich verwende Einhorn und versuche, dass keine Neustarts ohne Ausfallzeiten funktionieren.
Bisher ist alles eine großartige Sauce, der Master-Prozess gabelt und startet 4 neue Arbeiter, tötet dann den alten, alle sind glücklich.
Unsere Skripte senden den folgenden Befehl, um das Einhorn neu zu starten:
kill -s USR2 `cat /www/app/shared/pids/unicorn.pid`
An der Oberfläche sieht alles gut aus, aber es stellt sich heraus, dass das Einhorn die Produktion nicht neu lädt.(Bei jeder Bereitstellung ändern wir den config.action_controller.asset_host
-Wert in einen neuen CDN-Container-Endpunkt mit unseren vorkompilierten Assets.)
Nach dem Neustart von unicorn auf diese Weise zeigt der Asset-Host weiterhin auf die alte Version.Bei einem echten Neustart (dh: Stoppen Sie den Master-Prozess und starten Sie das Einhorn erneut von vorne) werden die neuen Konfigurationsänderungen übernommen.
preload_app
ist in unserer Einhorn-Konfigurationsdatei auf true
gesetzt.
Irgendwelche Gedanken?
Lösung
Ich vermute, dass Ihre Einhörner im alten Produktionsverzeichnis und nicht im neuen Produktionsverzeichnis neu gestartet werden. Mit anderen Worten, wenn Ihr Arbeitsverzeichnis in unicorn.rb <capistrano_directory>/current
ist, müssen Sie sicherstellen, dass der Symlink vor Ihnen erfolgtVersuchen Sie, die Einhörner neu zu starten.
Dies würde erklären, warum das manuelle Stoppen und Starten funktioniert: Sie führen diese Nachbereitstellung vermutlich aus, wodurch sie im richtigen Verzeichnis gestartet werden.
Wenn Sie in Ihrem Bereitstellungsprozess die Einhörner neu starten?Sie sollten sicherstellen, dass das USR2-Signal gesendet wird, nachdem das neue Release-Verzeichnis als aktuell verknüpft wurde.
Wenn dies nicht hilft, geben Sie bitte Ihre unicorn.rb und deploy.rb an.Dies erleichtert das Debuggen dieses Problems erheblich.
Andere Tipps
Beachten Sie Folgendes: Ihr Arbeitsverzeichnis in unicorn.rb sollte sein: / your / cap / directory / current
NICHT sein: File.expand_path ("../ ..", DATEI )
Weil der Einhorn- und Linux-Softlink-Forking-Fehler: Softlink nicht gut funktioniert.
zum Beispiel:
cd current #current ist ein Softlink zu einem anderen Verzeichnis
... ...
Wenn wir unser Arbeitsverzeichnis erhalten, erhalten wir den absoluten Pfad, nicht den Pfad in "aktuell"