jcc.initVM () non restituisce quando mod_wsgi è configurato come modalità daemon
Domanda
Sto usando mod-WSGI con Django, e in Django io uso pylucene di fare ricerca a testo integrale.
Mentre mod-WSGI è configurato per essere la modalità embedded, non v'è alcun problema a tutti. Ma quando mod-WSGI è configurato per essere modalità demone, l'apache appena si blocca, e il browser solo a mantenere carico, ma non appare nulla.
Poi ho identità il problema di essere il jcc.initVM (). Ecco il mio script WSGI:
import os, sys, jcc
sys.stderr.write('jcc.initVM\n')
jcc.initVM()
sys.stderr.write('finished jcc.initVM\n')
....
Dopo ho riavviato il mio apache, e fare una richiesta dal mio browser, trovo che /var/log/apache2/error.log ha solo:
jcc.initVM
Il che significa che si blocca alla linea jcc.initVM (). (Se il mod_wsgi è configurato come modalità incorporata, non c'è nessun problema.)
E qui è il mio / 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>
E, infine, scopro che nel codice sorgente del CCM (jcc.cpp), si blocca alla funzione:
JNI_CreateJavaVM(&vm, (void **) &vm_env, &vm_args)
Come risolvere il problema?
versioni del programma:
libapache2-mod-wsgi 2.3-1
jcc 2.1
python 2.5
Apache 2.2.9-8ubuntu3
Ubuntu 8.10
Soluzione
La correzione di questo problema è stato incluso nella mod_wsgi 2.4.
Altri suggerimenti
Si prega di fare riferimento a http://code.google.com/ p / modwsgi / temi / dettaglio? id = 131 per i dettagli di discussione.
In breve, la mod_wsgi bloccherà segnali per il programma demone, che può rendere initVM non funziona. Ulteriormente secondo Andi da CCM, initVM può essere chiamato solo dal thread principale, e può causare ulteriore problema pure.
Per questo ho deciso di spostare il codice di ricerca con initVM () per un processo totalmente separato e risolto il problema.