python - 为什么 Flask 没有给我一个交互式调试器?

标签 python apache flask mod-wsgi werkzeug

这是一个带有语法错误的简单 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 调试器:

enter image description here

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

enter image description here

我尝试了各种方法来完成这项工作:
  • 设置 app.debug = Trueapp = Flask(__name__) 之后
  • 基于 this link ,我也尝试添加此代码:
  • from werkzeug.debug import DebuggedApplication application = DebuggedApplication(app, True)
    但似乎没有任何帮助。

    我知道调试器在 fork 环境中不起作用,但根据 this link , mod_wsgi 的默认模式是 不是 被 fork 。我的 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,但调试器可能仍然以不可预见的方式不安全。通常,您通过使用日志记录来获取有关生产中错误的信息。 This answer是如何设置它的一个很好的基本总结。

    如果您替换了 app,您的方法可能会起作用。而不是称它为application . mod_wsgi 可能正在接收 app之前 application ,所以它仍在运行原始应用程序。还是建议换行app.wsgi_app尽管。

    关于python - 为什么 Flask 没有给我一个交互式调试器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36208236/

    相关文章:

    python - NLTK 缺少西类牙语 wordnet

    python - 从 github 运行 Travis-CI

    python - Python 是否有更简洁的方式来表达 "if x contains a|b|c|d..."?

    php - 将用户从任何没有 index.php 的文件夹路由到某个文件,例如 : index. php |使用.htaccess

    python-3.x - 在 flask 中发送发布请求时出错(python)

    python - 如何根据我的项目结构访问应用程序上下文之外的 flask 配置变量?

    python Tornado : WSGI module missing?

    python - 如何制作一个返回数字位置值的函数?

    php - Silex微框架: Run from a subfolder

    mysql - org.apache.solr.common.SolrException : Unable to create core