我有一个相当基本的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
答案 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(尚未发布)。