Apache/mod_wsgi默认仅在第一次要求进程时加载应用程序代码。 因此,第一步是配置mod_wsgi在进程启动时预加载您的代码,而不仅仅是第一个请求。 这可以使用WSGIImportScript指令在mod_wsgi 2.X中完成。
假设使用守护程序模式,这也是更好的选项,这意味着您将拥有类似以下内容的东西:
WSGIDaemonProcess django display-name=%{GROUP}
WSGIScriptAlias / /usr/local/django/mysite/apache/django.wsgi
WSGIImportScript /usr/local/django/mysite/apache/django.wsgi \
process-group=django application-group=%{GLOBAL}
<Directory /usr/local/django/mysite/apache>
WSGIProcessGroup django
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
当您进行代码更改时,不要触摸WSGI脚本文件,因为它只在下一次请求时被检查,而是向守护进程组中的进程发送SIGINT信号。
使用WSGIDaemonProcess的"display-name"选项,您可以通过使用BSD样式的'ps'程序来标识哪些进程。将"display-name"设置为'% {GROUP}','ps'输出应该显示'(wsgi:django)'作为进程名称。识别出进程ID并执行以下操作:
kill -SIGINT pid
将'pid'与实际进程ID交换。如果守护进程组中有多个进程,请向所有进程发送信号。
不确定是否可以使用'killall'一步完成此操作。在MacOS X上执行此操作时遇到了问题。
在mod_wsgi 3.X中,配置可以更简单,可以使用以下语句代替:
WSGIDaemonProcess django display-name=%{GROUP}
WSGIScriptAlias / /usr/local/django/mysite/apache/django.wsgi \
process-group=django application-group=%{GLOBAL}
<Directory /usr/local/django/mysite/apache>
Order deny,allow
Allow from all
</Directory>
也就是说,不需要使用单独的WSGIImportScript指令,而是可以将进程组和应用程序组作为参数传递给WSGIScriptAlias,并具有预加载应用程序的副作用。
wget
的调用由不同的进程处理 - 您可能需要多次加载它以确保。 - Dominic Rodger