在apache + mod_wsgi下运行subprocess.Popen始终返回错误,返回码为-6


问题内容

我希望有人看到过-

我正在运行django-
compressor,利用lessc设置来将less渲染/压缩到文件上的CSS中。从开发服务器调用时,它可以完美工作,但是在apache +
mod_wsgi下运行时,它始终返回错误。

为了进行调试,我已经运行了确切的命令,即过滤器是以www-
data用户(在WSGIDaemonProcess指令中定义为wsgi用户)调用的,并验证了它是否可以正常工作,包括读取和写入文件的权限。它正在操纵。

我也对该系统上compressor / filters / base.py中的django-
compressor代码进行了修改,并且似乎任何试图被调用的命令在proc.communicate()调用之后都得到了-6的返回码。

我希望有人以前见过这个-或它会响起一些钟声。在apache +
mod_wsgi进程之外的该机器上(在作为开发服务器运行该进程),它也可以正常工作。我只是不清楚什么可能阻止subprocess.Popen()调用。


问题答案:

您是否偶然使用Python 2.7.2?

该版本的Python引入了一个错误,该错误导致子解释器中的fork()失败:

http://bugs.python.org/issue13156

您必须通过设置以下命令来强制WSGI应用程序在该过程的主要Python解释器中运行:

WSGIApplicationGroup %{GLOBAL}

如果运行多个Django应用程序,则需要确保只有一个受影响的应用了此配置指令,否则您将导致所有Django应用程序都在一个解释器中运行,这由于Django配置的工作方式而无法实现。