无法在Flask中启用调试模式

时间:2014-05-08 20:48:44

标签: python flask

我有一个相当基本的Flask应用程序,但由于某种原因调试模式不会启用,所以每当我得到一个错误,我得到一个500页而不是带回溯的好的调试页面和所有这些。这是我的app / init .py:

from flask import Flask
from config import config


def create_app(config_name):
    app = Flask(__name__)
    app.config.from_object(config[config_name])
    config[config_name].init_app(app)

    from .main import main as main_blueprint
    app.register_blueprint(main_blueprint)

    from .api import api as api_blueprint
    app.register_blueprint(api_blueprint, url_prefix='/api/v1.0')

    return app

这是我的config.py:

import os

basedir = os.path.abspath(os.path.dirname(__file__))

class Config:
    SECRET_KEY = '12345'
    SQL_DRIVER = 'SQL Server Native Client 11.0'
    SQL_SERVER = 'WIN8\MSSQL2K12'
    SQL_DATABASE = 'LogMe'
    SQL_USER = 'LogMe'
    SQL_PASSWORD = 'password'

    @staticmethod
    def init_app(app):
        pass


class DevelopmentConfig(Config):
    DEBUG = True

config = {
    'development' : DevelopmentConfig
}

如果在其他地方碰巧出现问题,我已经在GitHub上发布了整个项目,但我认为这是在这两个文件中的某个地方: https://github.com/jcaine04/perf-dash/tree/master/app

1 个答案:

答案 0 :(得分:5)

调试器是 WSGI runner 的一部分; app.run()服务器。如果使用其他WSGI服务器,则需要显式添加调试器中间件:

def create_app(config_name):
    app = Flask(__name__)

    # ...

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

    return app

当您使用Flask-Script时,runserver运行Flask WSGI开发服务器并启用调试器。

不幸的是,Flask-Script版本2.0.3引入了a bug;除非您明确传入-d标志,否则它不会正确设置新的调试标志并且总是禁用调试器。无论你将use_debugger设置为true,都是如此;这是因为argparse store_true选项的默认设置是在未选中时存储False

解决方法是明确使用-d来修补flask_script/commands.py以提供所有--debug--no-debug选项{{1默认情况下:

self.use_debugger

我已将if self.use_debugger: options += (Option('-d', '--debug', action='store_true', dest='use_debugger', help="(no-op for compatibility)", default=self.use_debugger),) options += (Option('-D', '--no-debug', action='store_false', dest='use_debugger', default=self.use_debugger),) else: options += (Option('-d', '--debug', action='store_true', dest='use_debugger', default=self.use_debugger),) options += (Option('-D', '--no-debug', action='store_false', dest='use_debugger', help="(no-op for compatibility)", default=self.use_debugger),) 添加到尚未设置的两个选项中。

default=self.use_debugger的处理同样存在缺陷。

版本0.6.7和1.0不会受此错误的影响; fix has been committed for version 2.0.4(尚未发布)。