debugging 为什么我的flask错误处理器在gunicorn中不起作用?

uoifb46i  于 2023-06-23  发布在  其他
关注(0)|答案(1)|浏览(114)

我有一个Flask应用程序,它使用蓝图来组织不同的模块。我在www.example.com中定义了一个错误处理程序errors.py来处理500个错误,以呈现自定义的500个页面。

@main.app_errorhandler(500)
def internal_server_error(e):
    print 'yes'    
    return render_template('500.html'), 500

当我使用Flask内置服务器运行我的应用程序时,这个错误处理程序工作正常,我可以看到500.html页面。但是当我用gunicorn运行我的应用程序时,这个错误处理程序不起作用,我看不到500.html页面,我只看到一个默认的Internal Server Error消息。
我尝试了以下方法,但都没有效果:在我的应用程序中设置PROPAGATE_EXCEPTIONS=True,让Flask重新引发异常,而不是让gunicorn处理它们。在我的应用程序中设置DEBUG=True,让Flask显示错误消息,而不是让gunicorn处理它们。使用app.config['PROPAGATE_EXCEPTIONS']=True时,我使用的是gunicorn版本20.1.0,我使用以下命令运行gunicorn:

gunicorn -w 5 -t 60 -b 0.0.0.0:5000 manage:app

有人知道为什么我的错误处理程序不能在gunicorn中工作吗?我该如何解决这个问题?谢谢你!

nhjlsmyf

nhjlsmyf1#

我在这里看到两个问题:
1.看起来print缺少括号,这将导致语法错误
1.你似乎使用了一个不必要的变量。尝试将@main.app_errorhandler(500)更改为@main.app.errorhandler(500)
通过这些更改,带有此错误处理程序的最小flask应用程序看起来像这样:

from flask import Flask
app = Flask(__name__)

@app.route('/')
def index():
    raise Exception

@app.errorhandler(500)
def internal_server_error(e):
    print('yes')    
    return 'It works!', 500

if __name__ == '__main__':
    app.run(host='127.0.0.1', port=8000, debug=True)

上面的代码显示“It works!“访问索引页时。

相关问题