Flaviu
Flaviu

Reputation: 6294

Flask debug=True does not work when going through uWSGI

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()

Upvotes: 41

Views: 29662

Answers (4)

sunwarr10r
sunwarr10r

Reputation: 4787

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

Upvotes: 3

gonz
gonz

Reputation: 5276

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.

Upvotes: 35

Edwardr
Edwardr

Reputation: 2956

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.

Upvotes: 26

Rob Wouters
Rob Wouters

Reputation: 16327

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

Upvotes: 25

Related Questions