在apache+mod_wsgi下运行subprocess.Popen总是返回-6的错误代码
我希望有人见过这个问题 -
我在使用django-compressor,它可以把less文件转换成压缩后的CSS文件。在开发服务器上运行的时候一切都很顺利,但在apache+mod_wsgi环境下运行时,总是出现错误。
为了排查这个问题,我以www-data用户的身份(这是在WSGIDaemonProcess指令中定义的wsgi用户)运行了过滤器调用的确切命令,结果显示一切正常,包括读取和写入文件的权限。
我还在那个系统的django-compressor代码(在compressor/filters/base.py文件中)做了一些修改,发现任何尝试执行的命令在proc.communicate()调用后都返回了-6的错误代码。
我希望有人之前见过这个问题,或者能引起一些共鸣。在apache+mod_wsgi进程外(也就是作为开发服务器运行)时,这个过程运行得很好。我只是搞不清楚是什么原因阻止了subprocess.Popen()的调用。
1 个回答
8
你是不是在用Python 2.7.2这个版本呢?
这个版本的Python有个问题,会导致在子解释器中使用fork()时出错:
http://bugs.python.org/issue13156
你需要通过设置来强制WSGI应用在进程的主Python解释器中运行:
WSGIApplicationGroup %{GLOBAL}
如果你同时运行多个Django应用,确保只有受影响的那个应用使用这个设置,否则会导致所有Django应用都在一个解释器中运行,而这由于Django的配置方式是行不通的。