关于apache:使用wsgi延迟加载的Django启动代码

Django startup code with wsgi lazy loading

我正在使用apache+mod wsgi运行django应用程序。启动Apache时,wsgi似乎总是Lazyloads其应用程序,这意味着启动Apache时不会执行任何代码。只有当第一个请求出现时,整个应用程序才被加载、初始化等并返回给用户。

因为我需要在不依赖第一个请求的情况下运行一些代码,所以我想知道这个"懒惰的加载"是否可以以某种方式关闭或工作?

我尝试了wsgiimportscript virtualhost指令和"wsgilazyinitialization off"服务器1,但如果没有运气,应用程序在第一次请求时仍然会延迟加载。

有什么想法吗?

编辑:要使用正确的配置进行更新,请执行以下操作:

  • 在Ubuntu 13.10上运行
    • Apache2 2.4.6-2用户2.1
    • libapache2 mod wsgi,3.4-4
  • Stutup.Py
  • 我在/etc/apache2/mods-enabled/wsgi.conf和/etc/apache2/apache2.conf中关闭了"wsgilazyinitialization"。
  • 我在/etc/apache2/sites enabled/000-default.conf中有以下内容:

    wsgidaemonprocess lh.test.com进程=2个线程=15显示名称=%组wsgiprocessgroup lh.test.com网站wsgiscriptaalias//home/user/myapp/src/wsgi.pywsgiimportscript/home/user/myapp/src/startup.py进程组=%全局应用程序组=%全局

  • 和startup.py包含:

    进口WSGI打印"ZZZZ"

日志中没有显示任何内容…


在gram对这个问题的回答中,when-do-apache2-execute-a-wsgi-script指出了新的mod_wsgi>3处理方法。它(简而言之)将"流程组"和"应用程序组"添加到您的wsgiscriptaalias中

请参见ChangesInVersion0300中的"添加的功能"部分。

---从文件中截取---

对于同时提供了"process group"和"application group"参数的wsgiscriptaalias(而不是wsgiscriptaaliasmatch),既不使用只能在请求处理时计算的扩展变量,这也会导致在进程启动时预加载wsgi脚本文件,而不是仅在f申请的IRST请求到达。

---文件截图结束---

试试这个:(对我有用)

尝试使Apache配置指令如下所示:

1
2
3
4
5
6
7
8
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部分等中,因为存在一些与这些指令出现的位置和顺序相关的规则,如果不包括这些指令,人们将无法看到问题。

干杯