【问题标题】:Flask debug=True does not work when going through uWSGI通过 uWSGI 时 Flask debug=True 不起作用
【发布时间】:2012-05-09 00:59:23
【问题描述】:

我在我的烧瓶文件中调用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()

【问题讨论】:

  • 你能发帖flask_file_name.py吗?

标签: python wsgi flask


【解决方案1】:

问题是uwsgi 不调用app.run()。它调用app()。因此,您可以这样做:

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

【讨论】:

  • 谢谢。这有帮助。现在,如果我有语法错误,它会重定向到 nginx 静态 50x.html 错误页面。我怎样才能让烧瓶来处理呢?
  • 如果我在 uwsgi.ini 中设置 catch-exceptions = true 对我有用。
【解决方案2】:

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

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

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

所以,您看到 502 的原因就是这个。解决方法是在执行时将--catch-exceptions 添加到uWSGI。

【讨论】:

  • 你就是男人!它仍然没有像没有 uWSGI 那样被格式化,但我现在确实得到了错误。非常感谢!
  • 是的,但也请参见下面 gonz 的评论。 :)
  • 如果我在 py 文件中设置调试模式对我有用:app.debug = True。
【解决方案3】:

这个问题很老了,但我会发布这个以供将来参考......

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

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

这应该可以解决问题,但不要忘记仅在开发环境中这样做。

【讨论】:

  • 这对我有用,其他答案没有。谢谢。
  • 要使调试器提示工作,您必须在 uwsgi 中使用单个 worker (--workers 1, --threads 4)
  • 如果我设置调试模式,它对我有用:app.debug = True
【解决方案4】:

对我来说,它只有在我像这样结合上面的两个答案后才起作用:

from flask import Flask
app = Flask(__name__)

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

app.debug = True

【讨论】:

  • 为我工作,这对我来说是最好的解决方案。
猜你喜欢
  • 2018-12-20
  • 2018-02-04
  • 2015-04-13
  • 2020-09-12
  • 1970-01-01
  • 2018-06-07
  • 1970-01-01
  • 1970-01-01
  • 2012-11-11
相关资源
最近更新 更多