1

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

urls.py每当我对我的 django 核心文件( 、、、settings.py等)进行一些修改时views.py,我只需touchproject.wsgi 文件,更改就会立即出现在网页上。有时它会起作用。

但是有时它不会。阿帕奇只是挂起。它无法处理请求,需要重新启动(给用户 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

4

2 回答 2

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

于 2012-05-28T11:32:14.503 回答
1

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

如果您将此服务器用于 django-only,我建议您使用nginx +uwsgi或nginx+gunicorn设置。这将您的 Web 环境与您的后端隔离开来,允许您自由地重新启动 wsgi 进程而不会影响您的服务器。它还允许您显示一个漂亮的停机时间页面。

于 2012-05-28T11:04:18.993 回答