Code de démarrage de Django avec chargement de wsgi paresseux

Je lance une application Django en utilisant Apache + mod_wsgi. Au démarrage d’Apache, il semble que le wsgi charge toujours son application, ce qui signifie qu’aucun code n’est exécuté au démarrage d’Apache. Ce n’est que lorsque la première demande arrive que l’application entière est chargée, initalisée, etc. et renvoyée à l’utilisateur.

Comme je dois exécuter du code sans avoir à me fier à la première demande, je me demandais si ce “chargement paresseux” pouvait être désactivé ou contourné.

J’ai essayé la directive VirtualHost WSGIImportScript et le premier serveur “WSGILazyInitialization Off” mais sans chance, l’application se charge encore paresseusement à la première demande.

Une idée?

EDIT: Pour mettre à jour avec la configuration exacte:

  • en cours d’exécution sur Ubuntu 13.10
    • apache2 2.4.6-2ubuntu2.1
    • libapache2-mod-wsgi, 3.4-4
  • startup.py
  • Je mets ‘WSGILazyInitialization Off’ dans /etc/apache2/mods-enabled/wsgi.conf et /etc/apache2/apache2.conf
  • J’ai le suivant dans /etc/apache2/sites-enabled/000-default.conf:

    Processus WSGIDaemonProcess lh.test.com = 2 threads = 15 nom-affichage =% {GROUP} WSGIProcessGroup lh.test.com WSGIScriptAlias ​​/ /home/user/myapp/src/wsgi.py WSGIImportScript / home / utilisateur / myapp / src / startup.py process-group = ‘% {GLOBAL}’ application-group = ‘% {GLOBAL}’

  • et startup.py contient:

    import wsgi print ‘zzzzz’

Rien n’apparaît dans les journaux …

Dans la réponse de Gram à cette question, quand-does-apache2-execute-a-wsgi-script, il pointe le nouveau traitement de mod_wsgi> 3. Ce qui est (en un mot) append le “groupe-processus” et le “groupe-application” à votre alias WSGIScript

Voir la section Fonctions ajoutées dans ChangesInVersion0300

— extrait de la documentation —

Pour WSGIScriptAlias ​​(mais pas WSGIScriptAliasMatch) où les parameters ‘process-group’ et ‘application-group’ sont fournis, et n’utilisent ni les variables d’expansion qui ne peuvent être évaluées qu’au moment de la gestion des requêtes, le fichier script WSGI être préchargé au démarrage du processus, plutôt que d’être chargé paresseusement uniquement lorsque la première demande d’application arrive.

— fin de la documentation —

Essayez ceci: (ça a marché pour moi)

Essayez de faire en sorte que vos directives de configuration apache ressemblent à ceci:

 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}' 

Mettez maintenant votre print "zzzzz" au bas de votre fichier /home/user/myapp/src/wsgi.py.

Enfin: Si cela ne fonctionne pas pour vous, veuillez modifier votre question afin que votre configuration soit en blocs de code pour la rendre plus lisible. Inclure également où ils sont dans les directives de configuration apache. c’est-à-dire si elles sont dans les sections VirtualHost, etc. Comme il y a des règles liées à où et dans quel ordre ces directives apparaissent, et les gens ne pourront pas voir le problème si vous ne l’incluez pas.

À votre santé