Lut*_*elt 6 django nginx gunicorn
我有一个Django应用程序在gunicorn服务器上运行,前面有一个 nginx.我需要使用HTTP 500结果诊断生产失败,但错误日志文件不包含我期望的信息.正是如此:
errorlog = "/somepath/gunicorn-errors.log"error_log /somepath/nginx-errors.log;InternalErrorView在dispatch其中确实无条件raise Exception("Just for testing.")
这一观点被映射到URL/fail_nowhandler500DEBUG=True我的浏览器请求
运行我的应用程序时/fail_now,我看到通常的Django错误屏幕,包括"Just for testing."消息.精细.DEBUG=False,我得到的响应只包含<h1>Server Error (500)</h1>,正如预期的那样.精细.gunicorn-errors.log,根本没有HTTP 500事件的条目.为什么?我怎么才能得到它?
我想得到一个追溯.nginx-errors.log:没有500或/fail_nowURL的痕迹.
为什么?奖金问题:
当我将其与我原来的生产问题进行比较时,我得到了一个不同的响应:一个9行文档
<h1><p>Internal Server Error</p></h1>作为中心消息.
为什么?
奖金问题2:
当我将我的数据库内容复制到我的登台服务器(配置与生产服务器相同)并DEBUG=True在那里设置
Django时,/fail_now按预期工作,但我原来的问题仍然显示为<h1><p>Internal Server Error</p></h1>.
WTF?
好吧,花了很长时间,但我发现了一切:
<h1>Server Error (500)</h1>响应来自Django的
django.views.defaults.server_error(如果没有500.html模板存在).<h1><p>Internal Server Error</p></h1>从奖金问题来自gunicorn的gunicorn.workers.base.handle_error./fail_now,gunicorn还会在访问日志中记录问题,而不是错误日志; 大概是因为枪炮本身没有失败,只有应用程序有.logs
输出,这非常令人困惑)并且认为它会更好使用非常明确InternalErrorView的初始调试.(这是一个有趣的想法.)Content-Disposition标头的响应(在Django代码中生成),如下所示:
attachment; filename="dag-wönnegården.pdf".特殊角色显然能够在处理这种反应时使炮弹绊倒.写这个问题对诊断这种情况有很大帮助.现在,如果这个响应有助于其他人,那么StackOverflow魔法再次起作用.
| 归档时间: |
|
| 查看次数: |
4123 次 |
| 最近记录: |