通过uWSGI时,Flask debug = True不起作用

时间:2012-04-28 15:21:10

标签: python wsgi flask

我在烧瓶文件中调用app.run(debug=True)

我用uWSGI和nginx部署了它(我跟着these instructions

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

但是当我收到错误时,我在浏览器或uWSGI日志中都没有得到任何调试信息。

有什么想法吗?

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

4 个答案:

答案 0 :(得分:31)

这个问题已经过时了,但我会将其发布以供将来参考......

如果您想让werkzeug错误页面与uwsgi一起使用,请尝试使用werkzeug的DebuggedApplication中间件:

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

这应该可以解决问题,但不要忘记仅在开发环境中执行此操作。

答案 1 :(得分:24)

根据the Flask mailing list,您不能将Flask的调试选项与uWSGI一起使用,因为它不能在分叉环境中使用。

  

你看到502因为flask / werkzeug没有向网络服务器发送任何数据,   所以nginx将返回502。

     

您可以使用uWSGI中的--catch-exceptions选项模拟调试器   (但请不要在制作中这样做)

所以,你看到502s的原因就在于此。修复方法是在执行时将--catch-exceptions添加到uWSGI

答案 2 :(得分:22)

问题是uwsgi没有调用app.run()。它调用app()。所以你可以这样做:

from flask import Flask
app = Flask(__name__)
app.debug = True

答案 3 :(得分:0)

对我来说,只有在将上述两个答案合并后,它才起作用:

from flask import Flask
app = Flask(__name__)

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

app.debug = True