Reputation: 6294
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
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
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
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
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