2012-10-05 13 views
0

编辑200服务器错误:它现在在WSGIDaemonProcess推土机不断引发与Django项目和WSGI

我一直有内存使用问题摆脱“进程”后,并要监视内存的可能性通过使用名为dozer的wsgi中间件泄漏:http://pypi.python.org/pypi/Dozer

下面是Apache的错误日志:

的AssertionError:推土机中间件不处于多进程环境

在这里可使用的是从wsgi.py代码片段:

from django.core.wsgi import get_wsgi_application 
from dozer import Dozer 
application = get_wsgi_application() 
application = Dozer(application) 

这代码全部运行在manage.py的shell中,并且没有错误。

这里是显示的具体错误:

服务器遇到一个内部错误或配置错误,无法完成您的请求。 请联系服务器管理员,[未给出地址],并通知他们错误发生的时间,以及您可能已经造成的任何可能导致错误的事情。 有关此错误的更多信息可能在服务器错误日志中可用。

安装的推土机鸡蛋是最新的(python 2.7),也许服务器需要专门配置这样的东西?

这里是我的wsgi设置:

ServerRoot "/path/django/apache2" 
LoadModule dir_module  modules/mod_dir.so 
LoadModule env_module  modules/mod_env.so 
LoadModule log_config_module modules/mod_log_config.so 
LoadModule mime_module  modules/mod_mime.so 
LoadModule rewrite_module modules/mod_rewrite.so 
LoadModule setenvif_module modules/mod_setenvif.so 
LoadModule wsgi_module  modules/mod_wsgi.so 

KeepAlive Off 
Listen 28861 
MaxSpareThreads 3 
MinSpareThreads 1 
ServerLimit 1 
SetEnvIf X-Forwarded-SSL on HTTPS=1 
ThreadsPerChild 5 
WSGIDaemonProcess django threads=12 python-path=/path/django:/path/django/DareHut:/path/django/lib/python2.7 
WGIProcessGroup django 
WSGIRestrictEmbedded On 
WSGILazyInitialization On 
WSGIScriptAlias//path/django/DareHut/DareHut/wsgi.py 

我该怎么办?谢谢

+0

1.什么是推土机? 2.什么是“这样的事情”? 3.你如何配置Apache? 4.为什么你用“内存泄漏”标记这个? –

+0

对不起,在帖子中没有解释,推土机应该监控和跟踪内存泄漏。您可以在这里阅读更多信息:http://pypi.python.org/pypi/Dozer Apache尚未配置。 –

回答

3

后的Apache的配置的mod_wsgi和阅读:

http://code.google.com/p/modwsgi/wiki/ProcessesAndThreading

对于它的工作,你不能使用多进程的配置。

这意味着您不能在UNIX系统上使用mod_wsgi嵌入模式。

即使在使用守护进程模式时,也必须使用守护进程组中只有一个进程的配置。

虽然这样做有一个警告。不要使用WSGIDaemonProcess的'processes = 1'选项来执行此操作。您应该完全省略“进程”选项,并将其默认为单个进程。

任何'processes'选项的使用都会导致'wsgi.multiprocess'被标记为True,这会导致Dozer投诉。如果使用该选项,即使值为'1',也会在设计中触发该标志,以便在多个Apache服务器间进行负载均衡时,可以将服务器标记为多进程安排的一部分,即使只有一个进程也是如此。

所以使用:

WSGIDaemonProcess mygroup 
WSGIProcessGroup mygroup 

可能你已经使用了“流程”选项,或者已经忘记WSGIProcessGroup,而不是在守护进程模式实际运行中却错误地嵌入模式。

顺便说一句,如果你在浏览器的标签标签中看到'200 Error'是mod_wsgi 3.4中的一个小错误(如果这是你正在使用的)。返回的HTTP状态代码仍然是500,因为它应该是全部被解释为应该的,但是mod_wsgi没有正确地清除状态行,所以Apache会用它自己的500状态行代替它,所以标签中使用的状态行标签是错误的。

+0

我按照你的指示删除进程(它被设置为2),但同样的错误存在,这里是httpd.conf文件:WSGIDaemonProcess django threads = 12 python-path =/home/path/django:/ home/django /site:/home/django/lib/python2.7 WGIProcessGroup django –

+0

你有WSGIProcessGroup指令吗?编辑你的问题,并按照问题添加配置,以便看到它。另请阅读http://code.google.com/p/modwsgi/wiki/CheckingYourInstallation#Embedded_Or_Daemon_Mode和http://code.google.com/p/modwsgi/wiki/CheckingYourInstallation#Single_Or_Multi_Threaded –

+0

好吧,非常感谢它现在的作用! –

1

manage.py runserver本地运行它。

在一些战略位置(例如Dozer.__init__开始和Dozer.__call__开始处)在推土机(与pdb或您的IDE)中放置断点。 Dozerdozer/leak.py中定义。

逐步浏览,直到看到抛出的异常。

这不是一个简单的答案,但你会发现问题。

+0

Bizzare! runserver命令工作得很好。 –

+0

@ LucasOu-Yang:那么我想你不会找到问题的!我会更多地考虑这一点。检查你的Apache错误日志。你可能会在那里得到一些信息。同时您也可以在serverfault.com上发布类似的问题。 – dokkaebi

+0

@ LucasOu-Yang:如果你设置了'DEBUG = True',你也可能会得到美妙的django错误页面,但这可能不会像wsgi中间件那样低。 – dokkaebi