簡體   English   中英

無法在Flask中啟用調試模式

[英]Can't enable debug mode in 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

調試器是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

使用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),)

我已將default=self.use_debugger添加到尚未設置的兩個選項中。

self.use_reloader的處理同樣存在缺陷。

版本0.6.7和1.0不會受此錯誤的影響; 已針對版本2.0.4 (尚未發布) 提交修復程序

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM