首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >调试在Gunicorn中运行的Flask应用程序

调试在Gunicorn中运行的Flask应用程序
EN

Stack Overflow用户
提问于 2012-01-21 12:33:09
回答 6查看 70.9K关注 0票数 74

我一直在为我的应用程序开发一个新的开发平台,使用的是nginx/gunicorn和Flask。

从运行的角度来看,一切都很好--我遇到的问题是调试Flask层。当我的代码中有错误时,我只会得到一个直接返回给浏览器的500错误,并且在控制台或我的日志中没有显示任何内容。

我尝试过许多不同的配置/选项。我猜I一定遗漏了一些明显的东西。

我的gunicorn.conf:

代码语言:javascript
复制
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'

下面是一个引用-testserver.py的Flask代码示例:

代码语言:javascript
复制
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中运行flask应用程序的命令:

代码语言:javascript
复制
gunicorn -c gunicorn.conf.py testserver:app

谢谢你们

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-01-22 13:03:24

Flask的配置与gunicorn的完全不同,遵循the Flask documentation on config files之后,一个好的解决方案是将我的源码改为:

代码语言:javascript
复制
app = Flask(__name__)
app.config.from_pyfile('config.py')

在config.py中:

代码语言:javascript
复制
DEBUG = True
票数 49
EN

Stack Overflow用户

发布于 2012-12-19 14:26:04

被接受的解决方案对我不起作用。

Gunicorn是一个预分叉环境,显然是the Flask debugger doesn't work in a forking environment

注意

即使交互式调试器不能在分支环境中工作(这使得它几乎不可能在生产服务器上使用)……

即使您设置了app.debug = True,如果您使用gunicorn testserver:app运行,您仍然只会得到一个包含消息Internal Server Error的空页。你能做的最好的事情就是用gunicorn --debug testserver:app来运行它。这为您提供了除内部服务器错误消息之外的跟踪信息。但是,这只是您在终端中看到的文本跟踪,而不是在Flask调试器中看到的文本跟踪。

将Flask部分添加到testserver.py并运行python testserver.py来启动开发中的服务器,这将使您获得if __name__ ...调试器。换句话说,如果你想要Flask调试器,就不要在开发中使用gunicorn。

代码语言:javascript
复制
app = Flask(__name__)
app.config['DEBUG'] = True

if __name__ == '__main__':
    app.run()

给Heroku用户的提示:我个人仍然喜欢使用foreman start,而不是python testserver.py,因为it sets up all the env variables for me。要使其工作,请执行以下操作:

Procfile的内容

代码语言:javascript
复制
web: bin/web

bin/web,文件的内容相对于项目根目录

代码语言:javascript
复制
#!/bin/sh

if [ "$FLASK_ENV" == "development" ]; then
        python app.py
else
        gunicorn app:app -w 3
fi

在开发过程中,使用以下内容创建一个相对于项目根目录的.env文件(文档here)

代码语言:javascript
复制
FLASK_ENV=development
DEBUG=True

此外,不要忘记将testserver.py中的Flask行更改为不会在生产环境的调试模式下运行app.config['DEBUG']...的代码。

代码语言:javascript
复制
app.config['DEBUG'] = os.environ.get('DEBUG', False)
票数 82
EN

Stack Overflow用户

发布于 2013-08-24 07:15:01

对于Heroku用户,有一个比像尼克建议的那样创建一个/web脚本更简单的解决方案。

如果您想在开发中调试应用程序,只需使用foreman run python app.py而不是foreman start

票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8950674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档