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.pyapp.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文件应用,但现在上面的笔记应该让你去。