【问题标题】:running subprocess.Popen under apache+mod_wsgi is always returning an error with a returncode of -6在 apache+mod_wsgi 下运行 subprocess.Popen 总是返回错误,返回码为 -6
【发布时间】:2012-01-19 15:05:16
【问题描述】:

我希望有人看到这个 -

我正在运行 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() 调用的原因。

【问题讨论】:

  • 这台机器是否有机会运行 SELinux?如果,则暂时禁用后看看是否有效。
  • 我在 SELinux 上使用 Python 2.7.2 时遇到了同样的问题。 Python 2.5 在这里工作得很好。你能解决问题吗?

标签: python django apache mod-wsgi django-compressor


【解决方案1】:

您是否偶然使用了 Python 2.7.2?

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

http://bugs.python.org/issue13156

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

WSGIApplicationGroup %{GLOBAL}

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

【讨论】:

  • 刚刚重新编译了 Python 2.7.2 和 mod_wsgi 并应用了 issue13156 的补丁,它解决了问题。非常感谢,格雷厄姆!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-26
相关资源
最近更新 更多