在Apache mod_wsgi(嵌入模式)中部署django

时间:2012-05-28 10:38:54

标签: django apache

我在嵌入式模式下使用Apache作为我的生产服务器。

每当我对django核心文件(urls.pysettings.pyviews.py等)进行一些修改时,我只是touch project.wsgi文件和更改出现在网页即时。有时它有效。

然而,有时却没有。 Apache刚刚挂起。它无法提供请求并需要重新启动(为用户提供1-2秒的“内部服务器错误”消息)。然后我需要重新启动(重启,实际上也不起作用。它需要停止并重新启动)。

我粘贴了httpd.conf

中的一些代码
MaxSpareThreads 3
MinSpareThreads 1
ServerLimit 1
SetEnvIf X-Forwarded-SSL on HTTPS=1
ThreadsPerChild 5
WSGIDaemonProcess myproject processes=4 threads=12 python-path=[...]
WSGIProcessGroup myproject
WSGIRestrictEmbedded On

为什么?是因为Apache有时同时使用所有进程并且无法重新加载核心文件? (这就是'触摸'应该做的,对吗?)

编辑:对不起。 Apache以嵌入模式运行。我的错。我更新了这个问题。

EDIT2:包含WSGIProcessGroup

2 个答案:

答案 0 :(得分:2)

触摸WSGI脚本文件在嵌入模式下不会执行任何操作,因此毫不奇怪它不会一直有效。当它出现时,只是请求由一个之前没有处理过请求的新Apache进程处理。

要触摸WSGI脚本文件,您需要使用守护程序模式。您的配置虽然已经破了一半。您已为守护进程模式定义WSGIDaemonProcess,但之后未使用WSGIProcessGroup委派应用程序在该守护程序进程组下运行。

阅读:

http://code.google.com/p/modwsgi/wiki/ReloadingSourceCode

http://code.google.com/p/modwsgi/wiki/QuickConfigurationGuide#Delegation_To_Daemon_Process

答案 1 :(得分:1)

删除*.pyc文件更容易,因为这会强制刷新。但是,真正的问题的答案是正确的部署策略,因此您最终不会在生产服务器上进行开发。

如果您将此服务器仅用于django,我可以建议nginx+uwsginginx+gunicorn设置。这会将您的Web环境与后端隔离开来,从而允许您在不影响服务器的情况下自由重启wsgi进程。它还允许您显示一个不错的停机时间页面。