Flask debug=True does not work when going through uWSGI

Question:

I call app.run(debug=True) in my flask file.

and I have it deployed with uWSGI and nginx (I followed these instructions)

uwsgi -s /tmp/uwsgi.sock -w flask_file_name:app -H /path/to/virtual/env --chmod-socket 666

But when I get an error, I don’t get any debug information in the browser or in the uWSGI log.

Any ideas?

flask_file_name.py:

from flask import Flask, make_response, Response, jsonify
import json

app = Flask(__name__)
app.debug = True

@app.route("/")
def hello():
    return "Hello World!"

if __name__ == '__main__':
    app.run()
Asked By: Flaviu

||

Answers:

The problem is uwsgi does not call app.run(). It calls app(). So instead you can do this:

from flask import Flask
app = Flask(__name__)
app.debug = True
Answered By: Rob Wouters

According to the Flask mailing list you cannot use Flask’s debug option with uWSGI, because it’s not to be used in a forking environment.

You see 502 because flask/werkzeug do not send any data to the webserver,
so nginx will returns a 502.

You can emulate the debugger using –catch-exceptions option in uWSGI
(but please do not do it in production)

So, the reason you’re seeing 502s will be because of that. The fix would be to add --catch-exceptions to uWSGI on execution.

Answered By: Edwardr

This question is old, but I’ll post this for future reference…

If you want to get the werkzeug error page to work with uwsgi, try using werkzeug’s DebuggedApplication middleware:

from werkzeug.debug import DebuggedApplication
app.wsgi_app = DebuggedApplication(app.wsgi_app, True)

That should do the trick but DO NOT FORGET to do this ONLY in development environments.

Answered By: gonz

For me it only worked after I combined the two answers above like this:

from flask import Flask
app = Flask(__name__)

from werkzeug.debug import DebuggedApplication
app.wsgi_app = DebuggedApplication(app.wsgi_app, True)

app.debug = True
Answered By: sunwarr10r
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.