为什么 Flask 不给我交互式调试器?
Why isn't Flask giving me an interactive debugger?
这是一个语法错误的简单 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)
要将 WSGI 中间件添加到 Flask 应用程序,包装并替换应用程序的 wsgi_app
属性。在调试中间件的情况下,也设置 app.debug = True
以便 Flask 不会将异常转换为 500 个响应。
app.debug = True
app.wsgi_app = DebuggedApplication(app.wsgi_app, evalex=True)
运行 public 服务器上的调试器存在安全风险。尽管最近的更改要求在 运行 宁代码之前输入 PIN,但调试器可能仍然以无法预料的方式不安全。通常,您可以使用日志记录获取有关生产错误的信息。 是关于如何设置的很好的基本总结。
如果您替换 app
而不是调用它 application
,您的方法可能会起作用。 mod_wsgi 可能在 application
之前使用 app
,所以它仍然是 运行 原始应用程序。不过还是建议把 app.wsgi_app
换行。
这是一个语法错误的简单 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__)
之后立即设置 - 基于this link,我也尝试添加此代码:
app.debug = True
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)
要将 WSGI 中间件添加到 Flask 应用程序,包装并替换应用程序的 wsgi_app
属性。在调试中间件的情况下,也设置 app.debug = True
以便 Flask 不会将异常转换为 500 个响应。
app.debug = True
app.wsgi_app = DebuggedApplication(app.wsgi_app, evalex=True)
运行 public 服务器上的调试器存在安全风险。尽管最近的更改要求在 运行 宁代码之前输入 PIN,但调试器可能仍然以无法预料的方式不安全。通常,您可以使用日志记录获取有关生产错误的信息。
如果您替换 app
而不是调用它 application
,您的方法可能会起作用。 mod_wsgi 可能在 application
之前使用 app
,所以它仍然是 运行 原始应用程序。不过还是建议把 app.wsgi_app
换行。