Ich untersuche, wie man mit Python eine anständige Web-App entwickelt. Da ich nicht möchte, dass mir Strukturen höherer Ordnung im Weg stehen, fiel meine Wahl auf das leichte Flask-Framework . Die Zeit wird zeigen, ob dies die richtige Wahl war.
Jetzt habe ich einen Apache-Server mit mod_wsgi eingerichtet und meine Testseite läuft einwandfrei. Ich möchte jedoch die Entwicklungsroutine beschleunigen, indem die Site automatisch neu geladen wird, wenn Änderungen an den von mir vorgenommenen py- oder Vorlagendateien vorgenommen werden. Ich sehe, dass alle Änderungen in der .wsgi-Datei der Site ein erneutes Laden verursachen (auch ohne WSGIScriptReloading On in der Apache-Konfigurationsdatei), aber ich muss es trotzdem manuell ausführen (dh zusätzlichen Zeilenumbruch einfügen, speichern). Gibt es eine Möglichkeit, ein Neuladen zu verursachen, wenn ich einige der Py-Dateien der App bearbeite? Oder wird von mir erwartet, dass ich eine IDE verwende, die die .wsgi-Datei für mich aktualisiert?
flask run
funktioniert auch, da bei Ihnenpip install flask
auch eine ausführbare Flask- Datei imvenv/bin/
Ordner installiert ist .Wenn Sie über Test- / Entwicklungsumgebungen sprechen, verwenden Sie einfach die Debug-Option. Die Kolben-App wird automatisch neu geladen, wenn eine Codeänderung auftritt.
Oder aus der Shell:
http://flask.pocoo.org/docs/quickstart/#debug-mode
quelle
In Test- / Entwicklungsumgebungen
Der werkzeug-Debugger verfügt bereits über eine Funktion zum automatischen Neuladen, die durch eine der folgenden Aktionen aktiviert werden kann:
oder
Sie können bei Bedarf auch eine separate Konfigurationsdatei verwenden, um Ihr gesamtes Setup zu verwalten. Zum Beispiel verwende ich 'settings.py' mit der Option 'DEBUG = True'. Das Importieren dieser Datei ist ebenfalls einfach.
Dies ist jedoch nicht für eine Produktionsumgebung geeignet.
Produktionsumgebung
Persönlich habe ich Nginx + uWSGI aus einigen Leistungsgründen, aber auch wegen der Konfigurationsoptionen gegenüber Apache + mod_wsgi ausgewählt. Mit der Touch-Reload- Option können Sie eine Datei / einen Ordner angeben, durch die die uWSGI-Anwendung Ihre neu bereitgestellte Flask-App neu lädt.
Beispielsweise ruft Ihr Aktualisierungsskript Ihre neuesten Änderungen ab und berührt die Datei 'reload_me.txt'. Ihr uWSGI ini-Skript (das offensichtlich von Supervisord verwaltet wird) enthält diese Zeile irgendwo:
Ich hoffe das hilft!
quelle
.ini
. Wenn Sie die Dokumentation zum Thema "Touch-Reload" lesen, befindet sie sich in der Konfiguration von uWSGI und nicht von Supervisor.app.run(debug=True)
schlägt fehl, aber das Festlegen der Umgebungsvariablen funktioniert.Wenn Sie mit uwsgi arbeiten, sehen Sie sich die Option zum automatischen Neuladen von Python an:
Beispiel uwsgi-dev-example.ini:
site_root / __ init__.py
Dann renne:
Hinweis: In diesem Beispiel wird auch der Debugger aktiviert.
Ich bin diesen Weg gegangen, um die Produktion mit meinem Nginx-Setup so nah wie möglich nachzuahmen. Wenn Sie einfach die Flask-App mit dem eingebauten Webserver hinter nginx ausführen, führt dies zu einem fehlerhaften Gateway-Fehler.
quelle
Einige Updates für Flask 1.0 und höher
Der grundlegende Ansatz für das Heiß-Nachladen ist:
FLASK_ENV=development
(nichtFLASK_DEBUG=1
) verwendenflask run --debugger
Zur , um sicherzustellen, dass es eingeschaltet istFLASK_APP
und,FLASK_ENV
wenn Sie eine.env
Datei im Projektstamm haben und python-dotenv installiert habenquelle
export FLASK_ENV=development
arbeitete für mich.app.run(debug=True)
scheint nicht zu funktionieren.Ich habe eine andere Idee:
Zuerst:
Installieren Sie das
python-dotenv
Modul, das die lokalen Einstellungen für Ihre Projektumgebung liest.Zweite:
Fügen Sie eine
.flaskenv
Datei in Ihr Projektverzeichnis ein. Fügen Sie folgenden Code hinzu:Es ist fertig!
Mit dieser Konfiguration für Ihr Flask-Projekt sehen Sie beim Ausführen
flask run
diese Ausgabe in Ihrem Terminal:Und wenn Sie Ihre Datei bearbeiten, speichern Sie einfach die Änderung. Sie werden sehen, dass das automatische Neuladen für Sie da ist:
Mit mehr Erklärung:
Natürlich können Sie
export FLASK_ENV=development
jedes Mal manuell treffen, wenn Sie es brauchen. Die Verwendung einer anderen Konfigurationsdatei für die eigentliche Arbeitsumgebung scheint jedoch eine bessere Lösung zu sein. Ich empfehle daher dringend, diese Methode zu verwenden.quelle
FLASK_APP
Variable in die.flaskenv
Datei aufzunehmen.Flaschenanwendungen können optional im Debug-Modus ausgeführt werden. In diesem Modus werden zwei sehr praktische Module des Entwicklungsservers als Reloader und Debugger bezeichnet sind standardmäßig aktiviert. Wenn der Reloader aktiviert ist, überwacht Flask alle Quellcodedateien Ihres Projekts und startet den Server automatisch neu, wenn eine der Dateien geändert wird.
Standardmäßig ist der Debug-Modus deaktiviert. Um es zu aktivieren, legen Sie eine
FLASK_DEBUG=1
Umgebungsvariable fest, bevor Sie den Kolben aufrufenrun
:Ein Server mit aktiviertem Reloader ist während der Entwicklung äußerst nützlich, da der Server jedes Mal, wenn Sie eine Quelldatei ändern und speichern, automatisch neu startet und die Änderung übernimmt .
quelle
Um dies in PyCharm zu erreichen, setzen Sie den Abschnitt "Umgebungsvariablen" auf:
Für Flask 'Run / Debug-Konfigurationen'.
quelle