我有一个运行django应用程序的apache httpd 2.4.6运行,但偶尔在我们的夜间测试运行期间,服务器返回500错误代码,我无法弄清楚原因。 apache错误日志中没有任何内容指示原因。我已将LogLevel设置为' info'在我的apache配置(并重新加载apache)。我修改了' dispatch'我的视图方法,以便将请求参数记录到文件中。成功完成POST后,它会将其记录得很好,但是当返回500时没有任何内容。在回到500之前,我甚至不认为它会进入django应用程序。
然后我通过wsgi入口点修改为:
class MyWSGIHandler(WSGIHandler):
def __call__(self, environ, start_response):
print >>environ['wsgi.errors'], pprint.pformat(environ)
retval = super(MyWSGIHandler, self).__call__(environ, start_response)
print >>environ['wsgi.errors'], pprint.pformat(retval.__dict__)
return retval
application = MyWSGIHandler()
同样,通常,这会将所有内容正确记录到我的apache错误日志中,但是当返回500时,什么都没有。唯一能让我确定请求进入服务器的是apache访问日志中的一行:
[05 / Jun / 2014:22:41:10 +0000]" POST / HTTP / 1.1" 500 600
我不知道从哪里开始。
答案 0 :(得分:1)
Django将拦截代码本身中未处理的异常,并将它们转换为500个响应,并且不会将异常传播到WSGI服务器。因此,如果发生了这种情况,WSGI服务器或您的包装器都不会看到它们。
您需要配置Django以记录此类错误的详细信息。一种方法是设置ADMINS和邮件配置,以便它们可以通过电子邮件发送给您。另一种方法是使用Django正确设置日志记录模块,以便将记录的消息重定向到stderr并进入Apache错误日志。浏览Django文档以获取更多信息。
答案 1 :(得分:0)
我终于确定了问题。我使用LDAP进行身份验证,有时ldap服务器会为不在LDAP目录中的用户超时。无论出于何种原因,这导致500被退回。我在.htdigest文件中定义了该用户,并将我的AuthBasicProvider设置为" ldap文件"。在我转换到文件ldap"后,我从未见过这个问题。