我正在使用Apache + mod_wsgi的Django应用程序。 当启动Apache的,似乎总是WSGI其lazyloads应用程序,这意味着启动Apache的时候没有代码被执行。 只有当第一个请求进来是整个应用程序加载,initalized等,并返回给用户。
因为我需要,而不必依赖于第一次请求运行一些代码,我在想,如果这个“懒加载”能以某种方式被关闭或workedaround?
我试过WSGIImportScript VirtualHost指令和“WSGILazyInitialization关”服务器之一,但没有运气,应用程序还是懒洋洋地加载的第一个请求。
任何想法?
编辑:有确切的配置更新:
- 在Ubuntu 13.10上运行
- Apache2的2.4.6-2ubuntu2.1
- 中的libapache2-MOD-WSGI,3.4-4
- startup.py
- 我把“WSGILazyInitialization关”在/etc/apache2/mods-enabled/wsgi.conf和/etc/apache2/apache2.conf中
我在/etc/apache2/sites-enabled/000-default.conf如下:
WSGIDaemonProcess lh.test.com过程= 2个线程= 15显示名称=%{GROUP} WSGIProcessGroup lh.test.com WSGIScriptAlias / /home/user/myapp/src/wsgi.py WSGIImportScript /家庭/用户/ MyApp的/ SRC / startup.py处理组= '%{GLOBAL}' 应用程序组= '%{GLOBAL}'
和startup.py包含:
进口WSGI打印“ZZZZZ”
没有出现在日志...
在革兰氏回答这个问题的时候,确实-Apache2的-执行-A-WSGI脚本 ,他指出,新的mod_wsgi> 3的处理了这一点。 这是(简而言之)在“进程组”和“应用程序组”添加到您的WSGIScriptAlias
看到的功能中增加了部分ChangesInVersion0300
---从文档狙击---
对于WSGIScriptAlias(但不是WSGIScriptAliasMatch)其中两个“过程的基团”和提供“应用程序组”的参数,并且可以仅在请求处理时进行评价既不使用扩展变量,这也将导致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配置指令。 也就是说,如果他们在虚拟主机部分等。也有与这些指令出现在哪里和什么样的顺序一些规则,人们将无法看到这个问题,如果你不包括它。
干杯