Schließlich habe ich meine Entwicklungsumgebung von runserver auf gunicorn / nginx migriert.
Es wäre praktisch, die Autoreload-Funktion von runserver auf gunicorn zu replizieren, damit der Server automatisch neu gestartet wird, wenn sich die Quelle ändert. Ansonsten muss ich den Server manuell mit neu startenkill -HUP
.
Wie kann man den manuellen Neustart vermeiden?
kill -HUP
die Prozess-PID nicht wirklich verwenden, sondern stattdessen Supervisorctl verwenden. Denken Sie jedoch nicht, dass sich dies sehr ändert.Antworten:
Dies ist zwar eine alte Frage, nur aus Gründen der Konsistenz - da Version 19.0 Gunicorn
--reload
Option hat. Es wurden also keine Tools von Drittanbietern mehr benötigt.quelle
killall -HUP procname
funktioniert einwandfrei), damit neue Worker gestartet und alte ordnungsgemäß heruntergefahren werden.Eine Möglichkeit wäre, die --max-Anforderungen zu verwenden, um jeden erzeugten Prozess darauf zu beschränken, nur eine Anforderung zu bedienen, indem
--max-requests 1
zu den Startoptionen hinzugefügt wird . Bei jedem neu erzeugten Prozess sollten sich Ihre Codeänderungen ändern, und in einer Entwicklungsumgebung sollte die zusätzliche Startzeit pro Anforderung vernachlässigbar sein.quelle
pip
fähige Paket erfordertwatchdog
.Bryan Helmig hat sich das ausgedacht und ich habe es so geändert, dass es verwendet wird,
run_gunicorn
anstatt esgunicorn
direkt zu starten , damit diese 3 Befehle einfach ausgeschnitten und in eine Shell in Ihrem Django-Projektstammordner eingefügt werden können (wobei Ihre virtuelle Umgebung aktiviert ist):quelle
127.0.0.1:80
, bei Bedarf Ihre IP-Adresse oder Ihren FQDN und Ihren Port anstelle von zu verwenden .settings.py
,models.py
(Migration erforderlich) oder den Quellcode einer externen App nicht in meinemwatchmedo
Muster.Ich verwende Git Push, um es für die Produktion bereitzustellen, und richte Git Hooks ein, um ein Skript auszuführen. Der Vorteil dieses Ansatzes besteht darin, dass Sie gleichzeitig Ihre Migration und Paketinstallation durchführen können. https://mikeeverhart.net/2013/01/using-git-to-deploy-code/
Dann erstellen Sie ein Skript
/home/git/project_name.git/hooks/post-receive
.chmod u+x post-receive
Stellen Sie sicher , und fügen Sie Benutzer zu sudoers hinzu. Lassen Sie essudo supervisorctl
ohne Passwort laufen . https://www.cyberciti.biz/faq/linux-unix-running-sudo-command-without-a-password/Von meinem lokalen / Entwicklungsserver aus habe ich eingerichtet,
git remote
dass ich auf den Produktionsserver pushen kannAls Bonus sehen Sie alle Eingabeaufforderungen, während das Skript ausgeführt wird. Sie werden also sehen, ob es ein Problem mit der Migration / Paketinstallation / dem Neustart des Supervisors gibt.
quelle
#!/bin/bash
du shebang wie oben erwähnt verwendest, anstatt#!/bin/sh
was Gitpost-receive
Beispiel hatte!