【问题标题】:Gunicorn + Flask - @app.errorhandler(500) being ignored?Gunicorn + Flask - @app.errorhandler(500) 被忽略?
【发布时间】:2019-11-04 20:29:44
【问题描述】:

我花了很多时间搜索,但我很惊讶我没有找到答案。

我的烧瓶应用程序中有基本的@app.errorhandler(500) 代码。正如预期的那样,当我在 DEBUG 上运行时,我得到了一个调试器,当它为 false 时,我得到了我的自定义错误页面。我构建的下一个阶段是在 docker 容器中从 gunicorn 提供应用程序,而当我这样做时,我只是得到了通用的“内部服务器错误”。我猜 gunicorn 现在正在处理错误而不是烧瓶?但我一辈子都想不通如何要求它让烧瓶处理错误(如果可能的话),或者让它使用自定义错误页面。

最后阶段将是 nginx 后面的 docker 中的 gunicorn,但我想我已经为 nginx 找到了一个配置指令,让它让 gunicorn 处理错误 - 我只需要让 gunicorn 将它向下传递一个级别,所以我可以使用我的自定义错误页面,并向相关人员发出有关已发生错误的详细信息的通知(我怀疑如果我在 gunicorn 或 nginx 级别执行自定义错误页面,我会丢失)。非常感谢您的帮助。

【问题讨论】:

  • 好的,在阅读了更多内容之后,我得出的结论是,在这种情况下,flask 实际上应该进行错误处理,所以我为 404 创建了一个处理程序,我确实得到了我的自定义消息 - 所以现在我很困惑为什么我在触发 500 时没有收到自定义消息,特别是考虑到它 is 在我启动烧瓶开发服务器并关闭调试模式时工作:-/
  • 现在更奇怪的是,nginx 后面的同一个容器显示了我自定义的 500 错误。我现在真的很困惑。

标签: flask gunicorn


【解决方案1】:

我有Flask + gunicorn + Nginx系统,内部服务器错误默认使用Nginx处理,我添加了以下配置让flask处理500个错误:

import logging
from werkzeug.exceptions import InternalServerError
import traceback


@app.errorhandler(InternalServerError)
def handle_500(e):
    logging.error(traceback.format_exc())

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-10
    • 1970-01-01
    • 1970-01-01
    • 2021-02-13
    • 2018-03-03
    • 2020-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多