与WSGI延迟加载Django的启动代码(Django startup code with wsgi

2019-10-19 04:03发布

我正在使用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”

没有出现在日志...

Answer 1:

在革兰氏回答这个问题的时候,确实-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配置指令。 也就是说,如果他们在虚拟主机部分等。也有与这些指令出现在哪里和什么样的顺序一些规则,人们将无法看到这个问题,如果你不包括它。

干杯



文章来源: Django startup code with wsgi lazy loading