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
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top