Django启动代码与wsgi延迟加载

时间:2013-12-26 19:21:41

标签: django apache wsgi

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

由于我需要运行一些代码而不必依赖第一个请求,我想知道这个“延迟加载”是否可以某种方式被关闭或解决?

我尝试了WSGIImportScript VirtualHost指令和“WSGILazyInitialization Off”服务器,但没有运气,应用程序仍然在第一次请求时懒得加载。

有什么想法吗?

编辑: 要使用确切的配置进行更新:

  • 在Ubuntu 13.10上运行
    • apache2 2.4.6-2ubuntu2.1
    • libapache2-mod-wsgi,3.4-4
  • startup.py
  • 我在/etc/apache2/mods-enabled/wsgi.conf和/etc/apache2/apache2.conf中添加'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'

日志中没有任何内容......

1 个答案:

答案 0 :(得分:3)

在Gram对这个问题的回答when-does-apache2-execute-a-wsgi-script中,他指出了新的mod_wsgi> 3处理这个。这是(简而言之)将“进程组”和“应用程序组”添加到您的WSGIScriptAlias

请参阅ChangesInVersion0300

中的“已添加的功能”部分

---从文件中狙击---

对于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部分等。因为有一些规则与这些指令的出现位置和顺序有关,如果你不包括它,人们将无法看到问题。

干杯