Django + Apache + Windows WSGIDaemonProcess替代方案

时间:2011-02-03 04:07:03

标签: python django apache subprocess mod-wsgi

在设置django站点并在开发服务器上运行之后,我终于找到了使用推荐的mod_wsgi / apache22在生产环境中部署它的方法。我目前仅限于在Windows XP计算机上部署它。

我的问题是我编写的几个django视图使用python subprocess模块在​​文件系统上运行程序。我在运行subprocess.Popen时遇到了错误。我已经看到了几个提出过这个问题的SO问题,并且接受的答案是使用WSGIDaemonProcess来处理问题(由于apache用户的权限,我相信)。 / p>

唯一的问题是WSGIDaemonProcess在Windows上不适用于mod_wsgi。有什么方法可以一起使用mod_wsgi / apache / windows / subprocess吗?

2 个答案:

答案 0 :(得分:1)

无论如何,从mod_wsgi中打开子进程并不是一个好主意。

另一种(和常见的)是在apache端使用mod_proxy并将请求从apache转发到运行Django的WSGI服务器。这样做的好处是可以将python线程从apache的内存空间中移出。wsgi servers有很多选项。龙卷风和gunicorn是两个流行的选择,gunicorn将*与Django整合在一起。

*通过集成我只是意味着它提供了一个manage.py命令,如果你将它添加到INSTALLED_APPS。

答案 1 :(得分:1)

我遇到了一些尝试在此配置下使用子进程的问题。由于我不确定你有什么特别的麻烦我可以分享一些我不容易解决的事情,但事后看来似乎很微不足道。

  1. 尝试执行应用程序时,我收到了与权限相关的错误。我搜索了很多,但很难找到Windows特定的答案。这一点很明显:我将Apache运行的用户更改为具有更高权限的用户。 (注意,这会带来安全隐患,因此您需要确保了解自己要了解的内容)。
  2. Django(取决于您的配置)可以将字符串存储为Unicode。我有一个命令行应用程序,我试图使用我的视图中的一些参数运行,尽管传入了正确的参数但是崩溃了。经过几个小时的挫折我做了一个返回<type 'unicode'>的类型(args)而不是我期望的字符串。快速转换解决了这个问题。