Django 超时而不是返回异常
Django times out instead of returning exception
我有一个远程服务器 运行 Nginx -> gunicorn -> django。当我点击导致异常的视图时,我希望 500 server error
页面被 returned。相反,它挂起约 10 秒,我得到一个 502 bad gateway
.
当我查看 gunicorn 日志时,它们表明一个工人超时并被杀死。没有记录异常,也没有发送管理员电子邮件。 gunicorn 日志:
[2016-02-16 16:47:30 -0600] [5809] [CRITICAL] WORKER TIMEOUT (pid:5817)
[2016-02-16 22:47:30 +0000] [5817] [INFO] Worker exiting (pid: 5817)
[2016-02-16 16:47:30 -0600] [5833] [INFO] Booting worker with pid: 5833
在我的本地机器上,一切正常。它们都 运行 相同 settings.py
(DEBUG 为 False)。我将其简化为
的测试用例
def foo(request):
raise Exception('bar')
在本地浏览到它,它立即 return 出现 500 服务器错误页面,并触发管理员电子邮件。在远程服务器上,浏览器旋转了一会儿,然后 nginx return 收到错误的网关响应。不发送电子邮件,不记录异常。
常规页面 return 立即显示我期望的回复。它似乎只有在抛出异常时才会表现出不良行为。
什么可能导致这种行为?
起初我会增加nginx
:
proxy_connect_timeout 300s;
proxy_read_timeout 300s;
和gunicorn
设置:
--timeout 180
也许处理日志文件中的一些异常会有所帮助;
我想通了。防火墙不允许出站 SMTP 连接。 Django 在尝试发送电子邮件时挂起。
我有一个远程服务器 运行 Nginx -> gunicorn -> django。当我点击导致异常的视图时,我希望 500 server error
页面被 returned。相反,它挂起约 10 秒,我得到一个 502 bad gateway
.
当我查看 gunicorn 日志时,它们表明一个工人超时并被杀死。没有记录异常,也没有发送管理员电子邮件。 gunicorn 日志:
[2016-02-16 16:47:30 -0600] [5809] [CRITICAL] WORKER TIMEOUT (pid:5817)
[2016-02-16 22:47:30 +0000] [5817] [INFO] Worker exiting (pid: 5817)
[2016-02-16 16:47:30 -0600] [5833] [INFO] Booting worker with pid: 5833
在我的本地机器上,一切正常。它们都 运行 相同 settings.py
(DEBUG 为 False)。我将其简化为
def foo(request):
raise Exception('bar')
在本地浏览到它,它立即 return 出现 500 服务器错误页面,并触发管理员电子邮件。在远程服务器上,浏览器旋转了一会儿,然后 nginx return 收到错误的网关响应。不发送电子邮件,不记录异常。
常规页面 return 立即显示我期望的回复。它似乎只有在抛出异常时才会表现出不良行为。
什么可能导致这种行为?
起初我会增加nginx
:
proxy_connect_timeout 300s;
proxy_read_timeout 300s;
和gunicorn
设置:
--timeout 180
也许处理日志文件中的一些异常会有所帮助;
我想通了。防火墙不允许出站 SMTP 连接。 Django 在尝试发送电子邮件时挂起。