Weiß jemand, wie man ein mod_wsgi
automatisch eine Flask-App neu lädt, wenn sich eines der Module ändert? Ich habe WSGIScriptReloading On
ausprobiert, aber kein Glück. Die offizielle Dokumentation ist ein bisschen ein Bär ... Ich schätze, ich gebe einen Stich, wenn nein man weiß. Vielen Dank im Voraus!
Wenn es bei Syntaxfehlern (wie dem Flask-Reloader) nicht dauerhaft abstürzen könnte, wäre das großartig.
Mit mod_wsgi
sucht WSGIScriptReloading
nach Änderungen an der Konfigurationsdatei .wsgi
anstatt nach dem Code.
Mein Workflow besteht darin, meine Codeänderungen nur noch
hochzuladen %Vor% bewirkt, dass der Zeitstempel der letzten geänderten Datei geändert wird und mod_wsgi
den Code erneut lädt.
Sie können dies "remote" tun, indem Sie die .wsgi
-Datei auf Ihrem lokalen Rechner speichern und dann erneut hochladen, oder ich mache das einfach per SSH.
Sie können nicht viel mit Syntaxfehlern machen, der Code läuft entweder oder ist es nicht, aber ein Fix plus ein touch
bringt es wieder zum Laufen.
Man muss darauf achten, ob Sie über FTP arbeiten: Stellen Sie sicher, dass Sie die 'berührte' .wsgi
Datei zuletzt hochladen , sonst wird es mit dem falschen Code beginnen.
Ich denke, es ist eine sehr realistische Situation, Quellcode automatisch in der Produktion neu laden zu wollen. Stellen Sie sich eine Umgebung vor, in der Quellen pro Version bereitgestellt werden und ein Symlink für die Produktion auf eine dieser Versionen verweist. Wann immer Sie eine neuere Version veröffentlichen möchten, zeigen Sie einfach den Symlink auf einen anderen Pfad. Apache und mod_wsgi sammeln jedoch immer noch die Dateien aus dem symlinked-Verzeichnis und müssen daher einen Neulade-Mechanismus basierend auf Zeitstempeln, Größe oder w / e haben. Sicher, eine Anwendung ist vielleicht kein Problem, aber was ist mit dem Hosting von 15-20 Anwendungen, die alle aktiv entwickelt werden? Ein automatisches Nachladen von Quellen ist in solchen Situationen ein reiner Verlust, verglichen mit einem wiederholten Neustart des Apache.
Zurück zur Frage: Wenn das von Ihnen verwendete Framework (in diesem Fall "flask") kein Plugin oder Tool zum automatischen Nachladen von Quellcode enthält, sind die beiden von Graham und Malphas beschriebenen Optionen die besten Optionen. Entweder triggern Sie den wsgi-Prozess, um neu zu starten oder ein Überwachungssystem zu implementieren.
Sie haben recht, wenn Sie die WSGIScriptReloading-Anweisung hinzufügen. Die Flask-Dokumente machen es nicht 100% klar, aber Apache sucht nach Änderungen an Ihrer .wsgi-Datei. Die empfohlene Lösung besteht darin, einfach einen Touch-Befehl in Ihrer .wsgi-Datei als Teil Ihres Veröffentlichungsprozesses auszuführen.
Was meinst du, die offizielle Dokumentation ist eine Art Bär? Was ist falsch mit dem mitgelieferten Rezept:
Dieses Dokument erklärt auch, warum WSGIScriptReloading nicht das tut, was Sie erwarten.
Und nein, es ist nicht möglich, bei Syntaxfehlern dauerhaft abzustürzen. Es ist in Apache eingebettet und der ganze Sinn von Apache ist es, die Dinge am Laufen zu halten.
Klingt so, als sollten Sie Apache / mod_wsgi nicht für die Entwicklung verwenden. Jeder weiß, dass man in der Produktion kein automatisches Quellcode-Nachladen verwenden sollte, also kann ich mir nicht vorstellen, dass man das tun möchte.
Für die Produktion bevorzuge ich auch apache mod_wsgi, während ich für die Entwicklung den eingebauten Server des Kolbens verwende. Ich spalte prod und dev config Dateien und setze die debug
Direktive True
in der Dev-Konfiguration, so dass Flask Codeänderungen automatisch erkennen und neu laden kann.