Ich betreibe eine Django-App auf Apache + mod_python. Wenn ich einige Änderungen am Code mache, haben sie manchmal sofort Wirkung, andere nicht, bis ich Apache neu starte. Allerdings möchte ich das nicht wirklich machen, da es ein Produktionsserver ist, auf dem auch andere Dinge laufen. Gibt es eine andere Möglichkeit, das zu erzwingen?
Nur um es klarzustellen, da ich sehe, dass einige Leute es falsch verstehen, spreche ich von einer Produktion Umgebung. Für die Entwicklung nutze ich natürlich den Entwicklungsserver von Django.
Wenn möglich, sollten Sie zu mod_wsgi wechseln. Dies ist jetzt der empfohlene Weg , um Django trotzdem zu dienen, und ist viel effizienter in Bezug auf Speicher- und Serverressourcen.
In mod_wsgi ist jeder Site eine .wsgi
-Datei zugeordnet. Um eine Site neu zu starten, einfach touch
der relevanten Datei, und nur dieser Code wird neu geladen.
Wie andere vorgeschlagen haben, verwenden Sie stattdessen mod_wsgi. Um das automatische Neuladen durch Berühren der WSGI-Skriptdatei oder durch einen Monitor, der nach Codeänderungen sucht, zu erhalten, müssen Sie den Daemon-Modus unter UNIX verwenden. Eine leichte Hand kann unter Windows verwendet werden, wenn der Embedded-Modus verwendet wird. Alle Details finden Sie in:
Sie können die Anzahl der Verbindungen auf 1 reduzieren, indem Sie "MaxRequestsPerChild 1" in Ihrer httpd.conf-Datei festlegen. Aber tue es nur auf Testserver, nicht auf Produktion.
oder
Wenn Sie bestehende Verbindungen nicht beenden und Apache immer noch neu starten möchten, können Sie "gracefully" neu starten, indem Sie "apache2ctl gracefully" ausführen - alle bestehenden Verbindungen können beendet werden.
Verwenden Sie einen Testserver, der in Django enthalten ist. (wie ./manage.py runserver 0.0.0.0:8080
) Es wird die meisten Dinge tun, die Sie während der Entwicklung benötigen würden. Der einzige Nachteil ist, dass es gleichzeitige Anfragen mit Multithreading nicht verarbeiten kann.
Ich habe gehört, dass es einen Trick gibt, der Apaches Max-Instanzen auf 1 setzt, so dass jede Codeänderung sofort widergespiegelt wird - aber weil du gesagt hast, dass du andere Dienste ausführst, ist das vielleicht nicht dein Fall.
Tags und Links python django mod-python