jcc.initVM () no devuelve cuando mod_wsgi está configurado como modo demonio
Pregunta
Estoy utilizando mod-WSGI con Django, Django y en uso PyLucene hacer búsqueda de texto completo.
Mientras mod-WSGI está configurado para ser encajado modo, no hay ningún problema en absoluto. Pero cuando mod-WSGI está configurado para ser el modo demonio, el Apache simplemente se atasca, y el navegador sólo mantener la carga, pero no aparece nada.
Entonces la identidad del problema a la jcc.initVM (). Aquí está mi script WSGI:
import os, sys, jcc
sys.stderr.write('jcc.initVM\n')
jcc.initVM()
sys.stderr.write('finished jcc.initVM\n')
....
Después de reinicio mi Apache, y hago una petición de mi navegador, encuentro que /var/log/apache2/error.log sólo tiene:
jcc.initVM
Lo que significa que se queda atascado en la línea de jcc.initVM (). (Si el mod_wsgi está configurado como modo incrustado, no hay ningún problema.)
Y aquí está mi / etc / apache2 / sites-available / 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>
Y, por último, me entero de que en el código fuente de CCM (jcc.cpp), que se cuelga en la función:
JNI_CreateJavaVM(&vm, (void **) &vm_env, &vm_args)
¿Cómo resolver el problema?
Las versiones del programa:
libapache2-mod-wsgi 2.3-1
jcc 2.1
python 2.5
Apache 2.2.9-8ubuntu3
Ubuntu 8.10
Solución
La solución a este problema se incluye en mod_wsgi 2.4.
Otros consejos
Por favor, consulte http://code.google.com/ p / modwsgi / temas / detalle? id = 131 para los detalles de discusión.
En resumen, el mod_wsgi bloqueará las señales para el programa demonio, lo que puede hacer initVM no funciona. Además, según Andi de CCM, initVM sólo se puede llamar desde el hilo principal, y puede causar más problema también.
Por lo tanto decidí cambiar el código de búsqueda con initVM () para un proceso totalmente independiente y resuelto el problema.