在apache + mod_wsgi下运行subprocess.Popen总是返回一个错误,返回码为-6

hec*_*ckj 8 python apache django mod-wsgi django-compressor

我希望有人看到这个 -

我正在运行django-compressor,利用lessc设置来渲染/压缩文件中的CSS.它从开发服务器调用时效果很好,但是当在apache + mod_wsgi下运行时,它始终返回错误.

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

我还攻击了该系统上压缩器/ filters/base.py中的django压缩器代码,似乎尝试调用的任何命令在proc.communicate()调用后得到的返回码为-6.

我希望有人之前看过这个 - 或者说它响了一些铃声.它在apache + mod_wsgi进程之外的这台机器上运行正常(即作为开发服务器运行进程).我只是不清楚可能阻塞subprocess.Popen()调用的内容.

Gra*_*ton 8

您是偶然使用Python 2.7.2吗?

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

http://bugs.python.org/issue13156

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

WSGIApplicationGroup %{GLOBAL}
Run Code Online (Sandbox Code Playgroud)

如果运行多个Django应用程序,您需要确保只有受影响的应用程序将此配置指令应用于它,否则您将导致所有Django应用程序在一个解释器中运行,由于Django配置的工作方式,这是不可能的.