jcc.initVM () ne retourne pas lorsque mod_wsgi est configuré comme mode démon
Question
J'utilise mod-wsgi avec django, et django-je utiliser pylucene de faire des recherches en texte intégral.
Alors que mod-wsgi est configuré pour être mode intégré, il n'y a pas de problème du tout. Mais quand mod-wsgi est configuré pour être en mode démon, l'apache devient juste coincé, et le navigateur juste garder le chargement mais rien ne semble.
Alors je identifier le problème à l'jcc.initVM (). Voici mon script wsgi:
import os, sys, jcc
sys.stderr.write('jcc.initVM\n')
jcc.initVM()
sys.stderr.write('finished jcc.initVM\n')
....
Après avoir redémarrer mon apache, et faire une demande de mon navigateur, je trouve que /var/log/apache2/error.log seulement a:
jcc.initVM
qui signifie qu'elle se coince sur la ligne jcc.initVM (). (Si le mod_wsgi est configuré en mode intégré, il n'y a pas de problème.)
Et voici mon / etc / apache2 / sites disponibles / default:
WSGIDaemonProcess site user=ross group=ross threads=1
WSGIProcessGroup site
WSGIScriptAlias / /home/ross/apache/django.wsgi
<Directory /home/ross/apache/>
Order deny,allow
Allow from all
</Directory>
Et enfin, je trouve que dans le code source de jcc (jcc.cpp), il se bloque à la fonction:
JNI_CreateJavaVM(&vm, (void **) &vm_env, &vm_args)
Comment résoudre le problème?
versions du programme:
libapache2-mod-wsgi 2.3-1
jcc 2.1
python 2.5
Apache 2.2.9-8ubuntu3
Ubuntu 8.10
La solution
Le correctif de ce problème a été inclus dans mod_wsgi 2.4.
Autres conseils
S'il vous plaît se référer à http://code.google.com/ p / modwsgi / questions / détail? id = 131 pour les détails de la discussion.
En bref, la mod_wsgi bloquent les signaux pour le programme démon, ce qui peut rendre initVM ne fonctionne pas. En outre, selon Andi de jcc, initVM ne peut être appelé à partir du thread principal, et il peut causer des problèmes plus aussi bien.
J'ai donc décidé de déplacer le code de recherche avec initVM () à un processus totalement séparé et a résolu le problème.