, wie Heroku Protokollierung und Laufzeitfehler Ausgabe in Python zu sehen

7

Ich arbeite an einer Web-App in Python mit Heroku und ich kann nicht herausfinden, wie man es effektiv testen kann. Ich habe versucht, mit print (...) und sys.stdout.write (...), aber ich sehe keine Ausgabe, wenn ich lokal mit 'Vorarbeiter starten' oder wenn ich in der Cloud bereitstellen und 'Heroku Logs' laufen zu sehen Cloud-Protokolle. Außerdem kann ich nicht herausfinden, wie Python-Laufzeitfehler zu debuggen sind, wenn zum Beispiel eine Ausnahme auftritt. Die Webanforderung für die Anwendung gibt ein HTTP 500 zurück, aber ich kann das nicht überprüfen, um festzustellen, wo die Ausnahme entstanden ist. Gibt es eine Möglichkeit, diese Informationen zu sehen?

    
broseflip 20.09.2012, 00:17
quelle

3 Antworten

14

Das Hinzufügen von sys.stdout.flush() nach Druckanweisungen löste dieses Problem für mich.

In meinem Fall schien das Problem, dass stdout gepuffert ist, während stderr nicht ist.

Wenn Sie nicht einmal Ausnahmen über foreman start sehen, stellen Sie sicher, dass Sie Ihren Server am richtigen IP / PORT treffen. Sie sollten HTTP-Zugriffseinträge (z. B. GET /index.html) in der Ausgabe von foreman start sehen.

Sie können auch versuchen, Ihrem Web-Framework mitzuteilen, dass es im Debug-Modus ausgeführt werden soll. Die meisten modernen Frameworks zeigen Stacktraces im Browser im Debug / Dev-Modus an. Mit Flask? app.config['DEBUG'] = True oder app.run(..., debug=True) .

%Vor%     
cameronboehmer 13.10.2012 21:51
quelle
12

Wenn Sie Foreman verwenden, um ein Python-Projekt auszuführen, und Sie Probleme haben, stdout / stderr zu sehen, hier sind einige Lösungen für Sie. Wenn Sie eine Procfile verwenden, um die Python-CLI direkt aufzurufen, können Sie die Option '-u' verwenden, um die Pufferung von Standardausgaben zu vermeiden:

%Vor%

Wenn Sie eine Procfile verwenden, um einen WSGI-Server zu verwalten, z. B. das Starten von gunicorn, flask, bottle, eve usw., können Sie dem root Ihres Python-Projekts eine ".env" -Datei hinzufügen, die Folgendes enthält :

%Vor%

Siehe auch die Antworten zu dieser Frage: Vorarbeiter zeigt nur Zeile mit "starte wit pid #" und sonst nichts

    
jsears 28.01.2014 04:33
quelle
5

Hinweis für alle anderen Django / Python-Anfänger. Denken Sie daran,

hinzuzufügen %Vor%

und das so etwas

%Vor%

wird auf die Konsole gedruckt.

Wechsel von PHP zu Py / Dj KISS kann selten sein.

    
Data Mafia LLC 01.09.2013 17:26
quelle

Tags und Links