mod_wsgi-force-reload-modules
Gibt es eine Möglichkeit zu haben mod_wsgi laden Sie alle Module, die (vielleicht in einem bestimmten Verzeichnis) auf jeder laden?
Während der Arbeit an dem code, es ist sehr ärgerlich, apache neu starten, jedes mal, wenn etwas geändert wird. Die einzige Möglichkeit die ich bisher gefunden habe, ist modname = reload(modname)
unter jedem importieren.. aber das ist auch wirklich ärgerlich, da es bedeutet, dass ich werde gehen durch und entfernen Sie Sie alle zu einem späteren Zeitpunkt..
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den mod_wsgi Dokumentation über die code nachladen ist Ihre beste Wette für eine Antwort.
Den link:
http://code.google.com/p/modwsgi/wiki/ReloadingSourceCode
betont werden sollte. Es sollte auch emphaised, die auf UNIX-Systemen daemon-Modus von mod_wsgi verwendet werden muss, und Sie müssen implementieren Sie den code monitor in der Dokumentation beschrieben. Der gesamte Prozess nachladen option funktioniert nicht für embedded-Modus von mod_wsgi auf UNIX-Systemen. Obwohl auf Windows-Systemen die einzige Möglichkeit ist embedded-Modus, ist es möglich, durch ein bisschen Trickserei zu tun, die gleiche Sache durch das auslösen einer internen Neustart von Apache aus der code-monitoring-Skript. Dies ist auch in der Dokumentation beschrieben.
Folgende Lösung richtet sich an Linux-Benutzer nur, und wurde getestet unter Ubuntu Server 12.04.1
Laufen WSGI unter daemon-Modus, müssen Sie
WSGIProcessGroup
undWSGIDaemonProcess
Direktiven in der Apache-Konfigurationsdatei, zum BeispielWeitere details sind verfügbar in http://code.google.com/p/modwsgi/wiki/ConfigurationDirectives
Ein zusätzlicher bonus ist die zusätzliche Stabilität, wenn Sie mehrere WSGI-Websites unter dem gleichen server-eventuell mit VirtualHost-Direktiven. Ohne mit den daemon-Prozessen, fand ich zwei Django-Websites in Konflikt mit einander und drehen bis 500 Internal Server Error ist alternativ.
Zu diesem Zeitpunkt ist Ihr server ist in der Tat bereits mit der überwachung Ihrer WSGI-Website für die änderungen, obwohl es nur Uhren die Datei, die Sie angegeben
WSGIScriptAlias
wieDies bedeutet, dass Sie können erzwingen, das WSGI-daemon-Prozess neu zu laden, indem Sie ändern das WSGI-script. Natürlich Sie müssen nicht den Inhalt ändern, sondern
würde den trick tun.
Durch die Verwendung der oben genannten Methode können Sie automatisch neu laden ein WSGI-Website in der Produktionsumgebung, ohne Neustart/Neuladen der gesamten Apache-server, oder Sie ändern Ihre WSGI-Skript zu tun, Produktions-unsicherer code change monitoring.
Dies ist besonders nützlich, wenn Sie automatisiert bereitstellen von Skripten, und nicht möchten, starten Sie den Apache-server auf die Bereitstellung.
Während der Entwicklung, können Sie eine Dateisystem-änderungen watcher aufrufen
touch wsgi.py
jedes mal, wenn ein Modul unter Ihre Website ändert, zum Beispiel, pywatchIch weiß, es ist ein altes Thema, aber dies könnte jemand helfen. Töten Sie Ihren Prozess, wenn eine Datei in ein bestimmtes Verzeichnis geschrieben, die Sie verwenden können, so etwas wie dieses:
monitor.py
In Ihren server starten, rufen Sie es wie:
server.py
wenn Ihr Haupt-server-Datei in das Verzeichnis, das enthält alle Dateien, die Sie gehen können, wie:
Hinzufügen anderer Ordner ist als übungsaufgabe...
Müssen Sie den 'pip install inotify'
Dieser war abgekupfert von dem code hier: https://code.google.com/archive/p/modwsgi/wikis/ReloadingSourceCode.wiki#Restarting_Daemon_Processes
Dies ist eine Antwort auf meine doppelte Frage hier: WSGI Prozess reload-Module