Für das Leben von mir kann ich nicht herausfinden, woher meine Fehler in meiner Flask-App kommen, wenn ich es durch Gunicorn laufe, da ich nicht herausfinden kann, wie man eine Stapelspur angezeigt bekommt.Wie sieht man Ausnahmen in einer Flask + gunicorn App?
Zum Beispiel sagen wir, ich habe ein sehr einfaches "Hallo, Welt!" App in Flask geschrieben.
import logging
import os
from flask import Flask
app = Flask(__name__)
app.debug = True
@app.route('/')
def hello():
raise Exception('Exception raised!')
return 'Hello World!'
if __name__ == '__main__':
app.run()
Wenn ich betreibe diese mit python hello.py
, dann ist alles gut, da ich eine sehr nützliche Stack-Trace erhalten:
(venv)142:helloflask $ python hello.py
* Running on http://127.0.0.1:5000/
* Restarting with reloader
127.0.0.1 - - [30/Jun/2014 18:52:42] "GET/HTTP/1.1" 500 -
Traceback (most recent call last):
File "/Users/grautur/code/helloflask/venv/lib/python2.7/site-packages/flask/app.py", line 1836, in __call__
return self.wsgi_app(environ, start_response)
File "/Users/grautur/code/helloflask/venv/lib/python2.7/site-packages/flask/app.py", line 1820, in wsgi_app
response = self.make_response(self.handle_exception(e))
File "/Users/grautur/code/helloflask/venv/lib/python2.7/site-packages/flask/app.py", line 1403, in handle_exception
reraise(exc_type, exc_value, tb)
File "/Users/grautur/code/helloflask/venv/lib/python2.7/site-packages/flask/app.py", line 1817, in wsgi_app
response = self.full_dispatch_request()
File "/Users/grautur/code/helloflask/venv/lib/python2.7/site-packages/flask/app.py", line 1477, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/Users/grautur/code/helloflask/venv/lib/python2.7/site-packages/flask/app.py", line 1381, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/Users/grautur/code/helloflask/venv/lib/python2.7/site-packages/flask/app.py", line 1475, in full_dispatch_request
rv = self.dispatch_request()
File "/Users/grautur/code/helloflask/venv/lib/python2.7/site-packages/flask/app.py", line 1461, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/Users/grautur/code/helloflask/hello.py", line 10, in hello
raise Exception('Exception raised!')
Exception: Exception raised!
Wenn ich jedoch eine procfile mit
web: gunicorn hello:app
erstellen und starte dann die App mit foreman start -p 8000
, dann sehe ich gar nichts. Nur eine Webseite "Interner Serverfehler".
$ foreman start -p 8000
18:56:10 web.1 | started with pid 36850
(...nothing else is ever displayed...)
Wie bekomme ich meine Flask + gunicorn App, um nützlichere Debugmeldungen anzuzeigen? Ich habe versucht, app.debug = True
(und verschiedene Iterationen davon), wie es andere StackOverflow Beiträge vorgeschlagen scheint, aber es scheint nichts zu ändern.
Hallo, haben Sie eine Lösung gefunden? – DavidLin
Gunicorn loggt standardmäßig auf stderr und der einzige Grund, warum ich das erklären könnte, ist, wenn Gunicorn sich in einer Datei anmeldet (in diesem Fall bekommt man nichts auf stderr oder stdout). Hast du das schon ausprobiert? I.e. um gunicorn so zu konfigurieren, dass es sich mit 'web: gunicorn --error-logfile = hallo-gunicorn.log --access-logfile = hallo-gunicorn-access.log hallo: app' einloggen und sehen kann, was dort eingeloggt ist? – dimi