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 kill -HUP
neu starten.
Wie kann man den manuellen Neustart vermeiden?
4 Antworten
Dies ist zwar eine alte Frage, nur aus Gründen der Konsistenz - seit Version 19.0 hat gunicorn {{X0} } Option. Es wurden also keine Tools von Drittanbietern mehr benötigt.
Eine Möglichkeit wäre, die --max-Anfragen zu verwenden Beschränken Sie jeden erzeugten Prozess darauf, nur eine Anforderung zu bedienen, indem Sie --max-requests 1
zu den Startoptionen hinzufügen. 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.
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 -zu-Bereitstellungscode /
mkdir -p /home/git/project_name.git
cd /home/git/project_name.git
git init --bare
Erstellen Sie dann ein Skript /home/git/project_name.git/hooks/post-receive
.
#!/bin/bash
GIT_WORK_TREE=/path/to/project git checkout -f
source /path/to/virtualenv/activate
pip install -r /path/to/project/requirements.txt
python /path/to/project/manage.py migrate
sudo supervisorctl restart project_name
Stellen Sie sicher, dass chmod u+x post-receive
und Benutzer zu sudoers hinzugefügt werden. Lassen Sie es sudo supervisorctl
ohne Passwort ausführen. https://www.cyberciti.biz / faq / linux-unix-running-sudo-befehl-ohne-passwort /
Von meinem lokalen / Entwicklungsserver aus habe ich git remote
eingerichtet, mit dem ich auf den Produktionsserver übertragen kann
git remote add production ssh://user_name@production-server/home/git/project_name.git
# initial push
git push production +master:refs/heads/master
# subsequent push
git push production master
Als 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.
Bryan Helmig hat sich das ausgedacht und ich habe es so geändert, dass es run_gunicorn
verwendet. Anstatt gunicorn
direkt zu starten, können Sie diese 3 Befehle einfach ausschneiden und in eine Shell in Ihrem Django-Projektstammordner einfügen (bei aktivierter virtueller Umgebung):
pip install watchdog -U
watchmedo shell-command --patterns="*.py;*.html;*.css;*.js" --recursive --command='echo "${watch_src_path}" && kill -HUP `cat gunicorn.pid`' . &
python manage.py run_gunicorn 127.0.0.1:80 --pid=gunicorn.pid
Verwandte Fragen
Verknüpfte Fragen
Neue Fragen
python
Python ist eine dynamisch typisierte Mehrzweck-Programmiersprache mit mehreren Paradigmen. Es wurde entwickelt, um schnell zu lernen, zu verstehen, zu verwenden und eine saubere und einheitliche Syntax durchzusetzen. Bitte beachten Sie, dass Python 2 ab dem 01.01.2020 offiziell nicht mehr unterstützt wird. Fügen Sie für versionenspezifische Python-Fragen das Tag [python-2.7] oder [python-3.x] hinzu. Wenn Sie eine Python-Variante (z. B. Jython, PyPy) oder eine Bibliothek (z. B. Pandas und NumPy) verwenden, fügen Sie diese bitte in die Tags ein.