debugging在Gunicorn运行的Flask应用程序
我一直在为我的应用程序使用nginx / gunicorn和Flask开发一个新的开发平台。
Ops明智,一切工作正常 – 我遇到的问题是debuggingFlask层。 当我的代码出现错误时,我只是得到一个直接返回到浏览器的500错误,没有任何东西显示在控制台或我的日志中。
我已经尝试了许多不同的configuration/选项..我想我一定是错过了一些明显的东西。
我的gunicorn.conf:
import os bind = '127.0.0.1:8002' workers = 3 backlog = 2048 worker_class = "sync" debug = True proc_name = 'gunicorn.proc' pidfile = '/tmp/gunicorn.pid' logfile = '/var/log/gunicorn/debug.log' loglevel = 'debug'
borks- testserver.py的一些Flask代码的例子:
from flask import Flask from flask import render_template_string from werkzeug.contrib.fixers import ProxyFix app = Flask(__name__) @app.route('/') def index(): n = 1/0 return "DIV/0 worked!"
最后,使用gunicorn运行烧瓶应用程序的命令:
gunicorn -c gunicorn.conf.py testserver:app
谢谢你们
接受解决scheme不适合我。
Gunicorn是一个预分叉环境,显然Flaskdebugging器不能在fork环境中工作 。
注意
即使交互式debugging器在分支环境中不能工作(这使得在生产服务器上几乎不可能使用)
即使你设置了app.debug = True
,如果你使用gunicorn testserver:app
运行,你仍然只能得到一个带有Internal Server Error消息的空白页面。 用gunicorn可以做的最好的就是用gunicorn运行gunicorn --debug testserver:app
。 除了“ 内部服务器错误”消息之外,还会为您提供跟踪。 但是,这与您在terminal中看到的文本轨迹相同,而不是Flaskdebugging器。
将if __name__ ...
部分添加到testserver.py并运行python testserver.py
以在开发中启动服务器,您将获得Flaskdebugging器。 换句话说,如果你想使用Flaskdebugging器,不要在开发中使用gunicorn。
app = Flask(__name__) app.config['DEBUG'] = True if __name__ == '__main__': app.run()
提示Heroku用户:
就我个人而言,我仍然喜欢使用foreman start
,而不是python testserver.py
因为它为我设置了所有的envvariables 。 为了得到这个工作:
Procfile
内容
web: bin/web
bin/web
,文件的内容是相对于项目根目录的
#!/bin/sh if [ "$FLASK_ENV" == "development" ]; then python app.py else gunicorn app:app -w 3 fi
在开发中,创build一个相对于项目根的.env
文件,其内容如下(文档在这里 )
FLASK_ENV=development DEBUG=True
另外,不要忘记将testserver.py
的app.config['DEBUG']...
行testserver.py
为在生产环境中不能运行Flask的东西。
app.config['DEBUG'] = os.environ.get('DEBUG', False)
Flaskconfiguration完全独立于gunicorn的。 在configuration文件的Flask文档之后,一个好的解决办法是将我的源码更改为:
app = Flask(__name__) app.config.from_pyfile('config.py')
在config.py中:
DEBUG = True
对于Heroku用户来说 ,有一个比Nickbuild议的bin / web脚本更简单的解决scheme。
如果你想在开发中debugging你的应用程序,可以使用foreman run python app.py
来代替foreman start
。
尝试像这样在运行命令上设置debugging标志
gunicorn -c gunicorn.conf.py --debug testserver:app
并在Flask应用程序中保持DEBUG = True
。 必须有一个原因,为什么你的debugging选项不是从configuration文件应用,但现在上面的笔记应该让你去。