flask 应用程序在没有提供调试 pin 的情况下启动,也没有显示请求信息
flask application starts without giving debugging pin, also no request info displayed
我真的不确定我是如何进入这种模式的,但是当我在开发系统上启动我的 flask 应用程序时,我看到
2016-11-17 17:20:36,717 WARNING: * Debugger is active!
但是没有显示调试 PIN,我也没有看到进入服务器的请求。
当这种情况开始发生时,我四处寻找了一下,试图看看我做了什么改变导致了这种情况,但当时太忙于让应用程序正常工作而无法跟进。当然任何历史都早已过去。
你对如何调试有什么建议吗?
以防万一,我 运行 在 windows。
我使用
丢弃了 app.config
configkeys = app.config.keys()
configkeys.sort()
appconfig = []
for key in configkeys:
value = app.config[key]
if not owner_permission.can():
if key in ['SQLALCHEMY_DATABASE_URI','SECRET_KEY']:
value = '<obscured>'
appconfig.append({'label':key, 'value':value})
sysvars.append(['app.config',appconfig])
(稍后在 html 模板中显示 sysvars)并查看以下内容。我还尝试在 run()
调用中设置 debug=True
但没有效果。
APPLICATION_ROOT /
DEBUG True
EXPLAIN_TEMPLATE_LOADING False
JSONIFY_MIMETYPE application/json
JSONIFY_PRETTYPRINT_REGULAR True
JSON_AS_ASCII True
JSON_SORT_KEYS True
LOGGER_HANDLER_POLICY always
LOGGER_NAME rrwebapp
LOGGING_LEVEL_FILE 20
LOGGING_LEVEL_MAIL 40
LOGGING_MAIL_HANDLER <logging.handlers.SMTPHandler object at 0x03806630>
LOGGING_PATH C:\Users\Lou\Documents\Lou's Software\projects\rrwebapp\rrwebapp.log
MAX_CONTENT_LENGTH None
MINIMIZE_CDN_JAVASCRIPT False
PERMANENT_SESSION_LIFETIME 31 days, 0:00:00
PREFERRED_URL_SCHEME http
PRESERVE_CONTEXT_ON_EXCEPTION None
PROPAGATE_EXCEPTIONS None
SECRET_KEY flask development key
SEND_FILE_MAX_AGE_DEFAULT 12:00:00
SERVER_NAME None
SESSION_COOKIE_DOMAIN None
SESSION_COOKIE_HTTPONLY True
SESSION_COOKIE_NAME session
SESSION_COOKIE_PATH None
SESSION_COOKIE_SECURE False
SESSION_REFRESH_EACH_REQUEST True
SQLALCHEMY_BINDS None
SQLALCHEMY_COMMIT_ON_TEARDOWN False
SQLALCHEMY_DATABASE_URI mysql://rrwebuser:xxxxxxxxx@127.0.0.1/testnewracedb
SQLALCHEMY_ECHO False
SQLALCHEMY_MAX_OVERFLOW None
SQLALCHEMY_NATIVE_UNICODE None
SQLALCHEMY_POOL_RECYCLE None
SQLALCHEMY_POOL_SIZE None
SQLALCHEMY_POOL_TIMEOUT None
SQLALCHEMY_RECORD_QUERIES None
SQLALCHEMY_TRACK_MODIFICATIONS False
TEMPLATES_AUTO_RELOAD None
TESTING False
TRAP_BAD_REQUEST_ERRORS False
TRAP_HTTP_EXCEPTIONS False
USE_X_SENDFILE False
12/27/16 添加 requirements.txt
alembic==0.8.8
amqp==1.4.9
anyjson==0.3.3
appdirs==1.4.0
attrdict==2.0.0
billiard==3.3.0.23
blinker==1.4
celery==3.1.23
click==6.6
docutils==0.11
docx==0.2.4
ecdsa==0.13
ez-setup==0.9
Fabric==1.11.1
Flask==0.11.1
Flask-Login==0.3.2
Flask-Principal==0.4.0
Flask-SQLAlchemy==2.1
Flask-Uploads==0.2.1
Flask-WTF==0.12
flup==1.0.2
googlemaps==2.4.4
gpxpy==1.1.2
haversine==0.4.5
httplib2==0.9.2
ipython==1.1.0
itsdangerous==0.24
Jinja2==2.8
kombu==3.0.35
loutilities==0.11.0
lxml==3.6.0
Mako==1.0.4
MarkupSafe==0.23
mysql-python==1.2.5
oauthlib==2.0.0
paramiko==1.17.0
Pillow==3.2.0
pycrypto==2.6.1
pyreadline==2.0
python-editor==1.0.1
pytz==2013.9
requests==2.10.0
requests-oauthlib==0.7.0
running==1.4.0
six==1.10.0
SQLAlchemy==1.0.15
sqlalchemy-datatables===0.4.1lk3
tzlocal==1.0
unicodecsv==0.14.1
Werkzeug==0.11.11
WTForms==2.1
xlrd==0.9.2
xlwt==0.7.5
问题是 werkzeug 启动时日志级别设置不正确,导致信息消息被遮盖。需要进一步调试,但这显然是我的应用程序初始化的问题。
在我的初始化中添加以下代码可以解决问题。
# patch werkzeug logging -- not sure why this is being bypassed in werkzeug._internal._log
werkzeug_logger = logging.getLogger('werkzeug')
werkzeug_logger.setLevel(logging.INFO)
2019 年 5 月 8 日更新:
根据 Jorge Mendes 的评论,WERKZEUG_DEBUG_PIN 可用于将特定引脚设置为备用修复
我真的不确定我是如何进入这种模式的,但是当我在开发系统上启动我的 flask 应用程序时,我看到
2016-11-17 17:20:36,717 WARNING: * Debugger is active!
但是没有显示调试 PIN,我也没有看到进入服务器的请求。
当这种情况开始发生时,我四处寻找了一下,试图看看我做了什么改变导致了这种情况,但当时太忙于让应用程序正常工作而无法跟进。当然任何历史都早已过去。
你对如何调试有什么建议吗?
以防万一,我 运行 在 windows。
我使用
丢弃了 app.config configkeys = app.config.keys()
configkeys.sort()
appconfig = []
for key in configkeys:
value = app.config[key]
if not owner_permission.can():
if key in ['SQLALCHEMY_DATABASE_URI','SECRET_KEY']:
value = '<obscured>'
appconfig.append({'label':key, 'value':value})
sysvars.append(['app.config',appconfig])
(稍后在 html 模板中显示 sysvars)并查看以下内容。我还尝试在 run()
调用中设置 debug=True
但没有效果。
APPLICATION_ROOT /
DEBUG True
EXPLAIN_TEMPLATE_LOADING False
JSONIFY_MIMETYPE application/json
JSONIFY_PRETTYPRINT_REGULAR True
JSON_AS_ASCII True
JSON_SORT_KEYS True
LOGGER_HANDLER_POLICY always
LOGGER_NAME rrwebapp
LOGGING_LEVEL_FILE 20
LOGGING_LEVEL_MAIL 40
LOGGING_MAIL_HANDLER <logging.handlers.SMTPHandler object at 0x03806630>
LOGGING_PATH C:\Users\Lou\Documents\Lou's Software\projects\rrwebapp\rrwebapp.log
MAX_CONTENT_LENGTH None
MINIMIZE_CDN_JAVASCRIPT False
PERMANENT_SESSION_LIFETIME 31 days, 0:00:00
PREFERRED_URL_SCHEME http
PRESERVE_CONTEXT_ON_EXCEPTION None
PROPAGATE_EXCEPTIONS None
SECRET_KEY flask development key
SEND_FILE_MAX_AGE_DEFAULT 12:00:00
SERVER_NAME None
SESSION_COOKIE_DOMAIN None
SESSION_COOKIE_HTTPONLY True
SESSION_COOKIE_NAME session
SESSION_COOKIE_PATH None
SESSION_COOKIE_SECURE False
SESSION_REFRESH_EACH_REQUEST True
SQLALCHEMY_BINDS None
SQLALCHEMY_COMMIT_ON_TEARDOWN False
SQLALCHEMY_DATABASE_URI mysql://rrwebuser:xxxxxxxxx@127.0.0.1/testnewracedb
SQLALCHEMY_ECHO False
SQLALCHEMY_MAX_OVERFLOW None
SQLALCHEMY_NATIVE_UNICODE None
SQLALCHEMY_POOL_RECYCLE None
SQLALCHEMY_POOL_SIZE None
SQLALCHEMY_POOL_TIMEOUT None
SQLALCHEMY_RECORD_QUERIES None
SQLALCHEMY_TRACK_MODIFICATIONS False
TEMPLATES_AUTO_RELOAD None
TESTING False
TRAP_BAD_REQUEST_ERRORS False
TRAP_HTTP_EXCEPTIONS False
USE_X_SENDFILE False
12/27/16 添加 requirements.txt
alembic==0.8.8
amqp==1.4.9
anyjson==0.3.3
appdirs==1.4.0
attrdict==2.0.0
billiard==3.3.0.23
blinker==1.4
celery==3.1.23
click==6.6
docutils==0.11
docx==0.2.4
ecdsa==0.13
ez-setup==0.9
Fabric==1.11.1
Flask==0.11.1
Flask-Login==0.3.2
Flask-Principal==0.4.0
Flask-SQLAlchemy==2.1
Flask-Uploads==0.2.1
Flask-WTF==0.12
flup==1.0.2
googlemaps==2.4.4
gpxpy==1.1.2
haversine==0.4.5
httplib2==0.9.2
ipython==1.1.0
itsdangerous==0.24
Jinja2==2.8
kombu==3.0.35
loutilities==0.11.0
lxml==3.6.0
Mako==1.0.4
MarkupSafe==0.23
mysql-python==1.2.5
oauthlib==2.0.0
paramiko==1.17.0
Pillow==3.2.0
pycrypto==2.6.1
pyreadline==2.0
python-editor==1.0.1
pytz==2013.9
requests==2.10.0
requests-oauthlib==0.7.0
running==1.4.0
six==1.10.0
SQLAlchemy==1.0.15
sqlalchemy-datatables===0.4.1lk3
tzlocal==1.0
unicodecsv==0.14.1
Werkzeug==0.11.11
WTForms==2.1
xlrd==0.9.2
xlwt==0.7.5
问题是 werkzeug 启动时日志级别设置不正确,导致信息消息被遮盖。需要进一步调试,但这显然是我的应用程序初始化的问题。
在我的初始化中添加以下代码可以解决问题。
# patch werkzeug logging -- not sure why this is being bypassed in werkzeug._internal._log
werkzeug_logger = logging.getLogger('werkzeug')
werkzeug_logger.setLevel(logging.INFO)
2019 年 5 月 8 日更新: 根据 Jorge Mendes 的评论,WERKZEUG_DEBUG_PIN 可用于将特定引脚设置为备用修复