Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 无法确定apache中使用mod_wsgi的HTTP 500的原因_Django_Apache_Mod Wsgi - Fatal编程技术网

Django 无法确定apache中使用mod_wsgi的HTTP 500的原因

Django 无法确定apache中使用mod_wsgi的HTTP 500的原因,django,apache,mod-wsgi,Django,Apache,Mod Wsgi,我让ApacheHttpd2.4.6与一个正常工作的django应用程序一起运行,但偶尔在夜间测试运行期间,服务器会返回500个错误代码,我不知道为什么。apache错误日志中没有任何指示原因的内容。我在apache配置中将日志级别设置为“info”(并重新加载了apache)。我修改了视图的“dispatch”方法,以便它将请求参数记录到一个文件中。当一篇成功的文章完成后,它会很好地记录下来,但是当返回一篇500的文章时,里面什么都没有。我认为在返回500之前,它甚至不能进入django应用程

我让ApacheHttpd2.4.6与一个正常工作的django应用程序一起运行,但偶尔在夜间测试运行期间,服务器会返回500个错误代码,我不知道为什么。apache错误日志中没有任何指示原因的内容。我在apache配置中将日志级别设置为“info”(并重新加载了apache)。我修改了视图的“dispatch”方法,以便它将请求参数记录到一个文件中。当一篇成功的文章完成后,它会很好地记录下来,但是当返回一篇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访问日志中的一行:

[2014年6月5日:22:41:10+0000]“POST/HTTP/1.1”500 600


我不知道该怎么办。

Django将拦截代码中未处理的异常,并将其转换为500个响应,而不会将异常传播到WSGI服务器。因此,如果发生这种情况,WSGI服务器或包装器都不会看到它们


您需要配置Django以记录此类错误的详细信息。一种方法是设置管理员和邮件配置,以便它可以通过电子邮件将他们发送给您。另一种方法是使用Django正确设置日志模块,以便它将记录的消息重定向到stderr和Apache错误日志中。查看Django文档以了解更多信息。

我最终确定了问题所在。我使用LDAP进行身份验证,有时LDAP服务器会为不在LDAP目录中的用户超时。不管出于什么原因,这导致了500美元被退回。我在.htdigest文件中定义了该用户,并将AuthBasicProvider设置为“ldap文件”。在我将其切换到“文件ldap”之后,我就再也没有看到这个问题了。

这实际上是我所做的第一次故障排除。我忘了在我的问题描述中提到这一点。事实上,我在短时间内故意在代码中引入了一个错误,以验证电子邮件通知和日志是否正常工作。那么,是什么生成了500条响应内容呢。是Apache还是Django?您是否碰巧在Apache中配置了ErrorDocument指令?所有内容都指向它是由Apache生成的。我没有配置ErrorDocument指令。如果是Apache,通常会出现某种错误,表明Apache错误日志中存在问题。在这个时间段内没有任何消息吗?正确。该时间段的错误日志中根本没有任何消息。错误是否与维护工作有关?e、 日志旋转是否导致apache重新加载?