我有一个相当基本的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
Run Code Online (Sandbox Code Playgroud)
这是我的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
}
Run Code Online (Sandbox Code Playgroud)
我已经在GitHub上发布了整个项目,如果在其他地方发生了问题,但我认为这是在这两个文件中的某个地方:https: //github.com/jcaine04/perf-dash/tree/master/app
调试器是WSGI运行器的一部分; 该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
Run Code Online (Sandbox Code Playgroud)
使用Flask-Script时,runserver
运行Flask WSGI开发服务器并启用调试器.
不幸的是,Flask-Script版本2.0.3引入了一个bug ; 除非您明确传入标志,否则它不会正确设置新的调试标志并始终禁用调试器-d
.无论你设置use_debugger
为true,都是如此; 这是因为argparse
store_true
选项的默认值是False
在未选中时存储.
的解决办法是要明确使用-d
,或者补丁flask_script/commands.py
给所有--debug
和--no-debug
选项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),)
Run Code Online (Sandbox Code Playgroud)
我添加default=self.use_debugger
到两个尚未设置的选项.
处理self.use_reloader
同样有缺陷.
版本0.6.7和1.0不会受此错误的影响; 一个修复一直致力于为2.0.4版(还未发布).
归档时间: |
|
查看次数: |
7056 次 |
最近记录: |