2012-11-23 6 views

Antwort

0

Was meinen Sie "die offizielle Dokumentation ist eine Art Bär"? Was mit dem mitgelieferten Rezept falsch ist:

Dieses Dokument erklärt auch, warum WSGIScriptReloading nicht tut, was Sie erwarten.

Und nein, es ist nicht möglich, dauerhaft auf Syntaxfehler abstürzen. Es ist in Apache eingebettet und der ganze Sinn von Apache ist es, die Dinge am Laufen zu halten.

Klingt wie Sie sollten nicht Apache/mod_wsgi für die Entwicklung verwenden. Jeder weiß, dass man in der Produktion kein automatisches Quellcode-Nachladen verwenden sollte, daher kann ich mir nicht vorstellen, dass man das tun möchte.

+0

Ich neige dazu, zu denken, ‚die offizielle Dokumentation Art eines Bären ist‘ ist nur eine Verzichtserklärung gegen whiner Kommentare zu SO für „RTFM“ zuerst. –

+0

Oh, er meint, dass niemand 2-3 Stunden mehr über das automatische Nachladen von Quellcode lesen will. –

+0

Mehr, als dass man sich in den heutigen Tagen darum kümmern kann, Dokumentation zu lesen und zu verstehen. Sie erwarten von den Leuten von SO, dass sie für sie recherchieren und alle ihre Probleme lösen. Was sie nicht wissen, ist, dass sie das Unterstützungsnetzwerk zerstören, das verfügbar ist, um zu helfen, da die ursprünglichen Paketautoren nicht mehr gestört werden können, um Benutzern zu helfen, weil die Benutzer nicht zuerst versuchen wollen, sich selbst zu helfen. –

11

Mit mod_wsgi sucht WSGIScriptReloading nach Änderungen an der Konfigurationsdatei .wsgi, anstatt den Code.

Mein Workflow ist meine Code-Änderungen laden dann nur

$ touch MyWebApp.wsgi 

, die den letzten geänderte Datei Zeitstempel führt zu ändern und mod_wsgi den Code neu zu laden.

Sie können dies "remote" tun, indem Sie die Datei .wsgi auf Ihrem lokalen Rechner speichern und dann erneut hochladen, oder ich mache es einfach per SSH.

Nicht viel können Sie über Syntaxfehler tun, der Code läuft entweder oder es ist nicht, aber ein Fix plus touch wird es wieder zum Laufen bringen.

Ein Gotcha zu achten ist, wenn Sie über FTP arbeiten: Stellen Sie sicher, dass Sie die ‚berührt‘ .wsgi Datei letzte sonst laden werde es versuchen und mit dem falschen Code starten.

+2

Bitte beachten Sie, dass das, worüber Sie sprechen, nur für den mod_wsgi-Daemon-Modus funktioniert. –

+0

Danke, diese Antwort funktioniert für mich – jonprasetyo

+0

@GrahamDumpleton ist das ein akzeptabler Workflow mit mod_wsgi, Ihrer Meinung nach? – johnny

1

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? Das automatische Neuladen von Quellen ist in solchen Situationen ein reiner Verlust, verglichen mit dem wiederholten Neustart von Apache.

Zurück zur Frage: Wenn das verwendete Framework (in diesem Fall flask) kein Plugin oder Tool zum automatischen Nachladen des Quellcodes enthält, sind die beiden von Graham und Malphas beschriebenen Optionen die besten Optionen . Starten Sie den wsgi-Prozess entweder neu oder implementieren Sie ein Überwachungssystem.

1

Sie haben recht, wenn Sie die WSGIScriptReloading-Direktive 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, einen Touch-Befehl in Ihrer .wsgi-Datei als Teil Ihres Releaseprozesses auszuführen.

0

Für die Produktion bevorzuge ich auch Apache mod_wsgi, während ich für die Entwicklung den eingebauten Server des Kolbens verwende. Ich teile prod und dev config Dateien und ich setze die debug Direktive True in der Dev-Konfiguration, so dass Flask Codeänderungen automatisch erkennen und neu laden kann.

+0

Betrachten Sie die Verwendung von mod_wsgi-express für die Entwicklung. Schaue in meinem Blog nach neuen Beiträgen und suche nach kommenden, die mehr über die Verwendung in einer Entwicklungsumgebung sprechen. –

0

Die richtige Antwort auf diese Frage ist, dass die in 000-default.conf Gegenwart unter /etc/apache2/sites-enabled Ordner hinzugefügt werden muss.

unten Beispiel Siehe

<VirtualHost *:80> 
     # The ServerName directive sets the request scheme, hostname and port that 
     # the server uses to identify itself. This is used when creating 
     # redirection URLs. In the context of virtual hosts, the ServerName 
     # specifies what hostname must appear in the request's Host: header to 
     # match this virtual host. For the default virtual host (this file) this 
     # value is not decisive as it is used as a last resort host regardless. 
     # However, you must set it for any further virtual host explicitly. 
     #ServerName www.example.com 

     ServerName sentiments.live 
     ServerAdmin [email protected] 
     DocumentRoot /var/www/html 
     WSGIDaemonProcess flaskapp threads=5 
     WSGIScriptAlias//var/www/html/sentiments/flaskapp.wsgi 

     <Directory sentiments> 
       WSGIScriptReloading On 
       WSGIProcessGroup sentiments 
       WSGIApplicationGroup %{GLOBAL} 
       Order deny,allow 
       Allow from all 
     </Directory> 
+0

Sie brauchen '' WSGIScriptReloading On'' nicht, da dies die Standardeinstellung ist. Für weitere Informationen siehe http://modwsgi.readthedocs.io/en/develop/user-guides/reloading-source-code.html –

+0

Sie haben auch eine Reihe anderer Dinge falsch. Das Argument für '' Directory'' sollte ein absoluter Pfad sein, der mit ''/' 'beginnt. Ansonsten ist die Übereinstimmung nicht sicher und hängt von der globalen Apache-Konfiguration ab. –

+0

Das Argument für '' WSGIProcessGroup'' stimmt auch nicht mit dem Namen überein, den Sie für '' WSGIDaemonProcess'' verwendet haben. Daher würde die falsche Daemon-Prozessgruppe fehlschlagen oder übereinstimmen, wenn an einer anderen Stelle dieser Name definiert wäre. –