我在嵌入式模式下使用Apache作为我的生产服务器。
每当我对django核心文件(urls.py
,settings.py
,views.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
行
答案 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+uwsgi或nginx+gunicorn设置。这会将您的Web环境与后端隔离开来,从而允许您在不影响服务器的情况下自由重启wsgi进程。它还允许您显示一个不错的停机时间页面。