【问题标题】:Why isn't Flask giving me an interactive debugger?为什么 Flask 没有给我一个交互式调试器?
【发布时间】:2016-07-12 12:26:51
【问题描述】:

这是一个带有语法错误的简单 Flask 应用程序(应该是 sys.version,而不是 sys.version()

from flask import Flask, url_for, request, render_template
import sys

app = Flask(__name__)
app.config.from_object(__name__)

@app.route('/')
def index():
    version = sys.version()
    return "This is the index page.  Python version info: {}".format(version)

if __name__ == '__main__':
    app.run(debug=True)

当我在本地运行它并尝试访问 http://localhost:5000 时,我得到了不错的 Werkzeug 调试器:

但是当我在远程服务器(Apache 2.4.17,mod_wsgi 4.4.21)上运行它时,我只得到一个通用的 500 错误页面:

我已经尝试了各种方法来完成这项工作:

  • app = Flask(__name__) 之后设置app.debug = True
  • 基于this link,我也尝试添加此代码:

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

但似乎没有任何帮助。

我知道调试器在分叉的环境中不起作用,但根据this link,mod_wsgi 的默认模式是 被分叉。我的 Apache 配置是:

WSGIDaemonProcess flasktest user=david group=devgrp threads=1 python-path=/apps/www/80/wsgi-scripts/FlaskTest:/apps/.virtualenvs/flasktest/lib/python3.4/site-packages

那么为什么我不能得到漂亮的调试器呢?

编辑:这是我添加的修改后的文件(不起作用)

from flask import Flask
import sys

app = Flask(__name__)
app.config.from_object(__name__)
app.debug = True

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

@app.route('/')
def index():   
    version = sys.version()
    return "This is the index page.  Python version info: {}".format(version)

if __name__ == '__main__':
    app.run(debug=True)   

【问题讨论】:

    标签: python apache flask mod-wsgi werkzeug


    【解决方案1】:

    要将 WSGI 中间件添加到 Flask 应用程序,请包装并替换应用程序的 wsgi_app 属性。对于调试中间件,还要设置app.debug = True,这样 Flask 就不会将异常转换为 500 响应。

    app.debug = True
    app.wsgi_app = DebuggedApplication(app.wsgi_app, evalex=True)
    

    在公共服务器上运行调试器存在安全风险。尽管最近发生了变化,在运行代码之前需要一个 PIN,但调试器可能仍然以不可预见的方式不安全。通常,您通过使用日志记录来获取有关生产中错误的信息。 This answer 是关于如何设置它的一个很好的基本总结。


    如果您替换了app 而不是调用它application,您的方法可能会起作用。 mod_wsgi 可能在application 之前获取app,因此它仍在运行原始应用程序。不过还是建议将app.wsgi_app 包装起来。

    【讨论】:

      猜你喜欢
      • 2013-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-12
      • 2020-07-31
      • 1970-01-01
      • 2016-09-18
      • 2010-10-09
      相关资源
      最近更新 更多