我正在使用Apache + mod_wsgi运行Django应用程序。在启动Apache时,似乎wsgi总是延迟加载其应用程序,这意味着Apache启动时不会执行任何代码。 只有当第一个请求进入时,整个应用程序才会被加载,初始化等,并返回给用户。
由于我需要运行一些代码而不必依赖第一个请求,我想知道这个“延迟加载”是否可以某种方式被关闭或解决?
我尝试了WSGIImportScript VirtualHost指令和“WSGILazyInitialization Off”服务器,但没有运气,应用程序仍然在第一次请求时懒得加载。
有什么想法吗?
编辑: 要使用确切的配置进行更新:
我在/etc/apache2/sites-enabled/000-default.conf中有以下内容:
WSGIDaemonProcess lh.test.com processes = 2 threads = 15 display-name =%{GROUP} WSGIProcessGroup lh.test.com WSGIScriptAlias / /home/user/myapp/src/wsgi.py WSGIImportScript /home/user/myapp/src/startup.py process-group ='%{GLOBAL}'application-group ='%{GLOBAL}'
并且startup.py包含:
导入wsgi 打印'zzzzz'
日志中没有任何内容......
答案 0 :(得分:3)
在Gram对这个问题的回答when-does-apache2-execute-a-wsgi-script中,他指出了新的mod_wsgi> 3处理这个。这是(简而言之)将“进程组”和“应用程序组”添加到您的WSGIScriptAlias
中的“已添加的功能”部分---从文件中狙击---
对于WSGIScriptAlias(但不是WSGIScriptAliasMatch),其中提供了'process-group'和'application-group'参数,并且都没有使用只能在请求处理时进行评估的扩展变量,这也会导致WSGI进程启动时要预加载的脚本文件,而不是仅在第一次请求应用程序到达时才延迟加载。
---结束文件---
试试这个:(它对我有用)
尝试使您的apache配置指令如下所示:
WSGIScriptAlias / /home/user/myapp/src/wsgi.py \
application-group='%{GLOBAL}' process-group='lh.test.com'
WSGIDaemonProcess lh.test.com processes=2 threads=15 display-name=%{GROUP}
WSGIProcessGroup lh.test.com
# Probably wont need this anymore.
#WSGIImportScript /home/user/myapp/src/startup.py \
# process-group='%{GLOBAL}' application-group='%{GLOBAL}'
现在将print "zzzzz"
放在/home/user/myapp/src/wsgi.py文件的底部。
最后:如果这对您不起作用,请修改您的问题,以便您的配置位于代码块中,以使其更具可读性。还包括这些在apache配置指令中的位置。即如果他们在VirtualHost部分等。因为有一些规则与这些指令的出现位置和顺序有关,如果你不包括它,人们将无法看到问题。
干杯