2009-02-14 4 views
3

Я использую mod-wsgi с django, а в django я использую pylucene для полнотекстового поиска.jcc.initVM() не возвращается, когда mod_wsgi настроен как режим демона

В то время как mod-wsgi настроен на встраиваемый режим, проблем нет. Но когда mod-wsgi настроен на режим демона, apache просто застревает, и браузер просто продолжает загружаться, но ничего не появляется.

Тогда я идентифицирую проблему как jcc.initVM(). Вот мой WSGI сценарий:

import os, sys, jcc 
sys.stderr.write('jcc.initVM\n') 
jcc.initVM() 
sys.stderr.write('finished jcc.initVM\n') 
.... 

После того как я перезагрузить апач, и сделать запрос из моего браузера, я считаю, что /var/log/apache2/error.log только имеет:

jcc.initVM 

Это означает, что он застревает на линии jcc.initVM(). (Если mod_wsgi сконфигурирован как встроенный режим, нет никаких проблем.)

А вот мой/и т.д./apache2/сайтов доступного/по умолчанию:

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> 

И, наконец, я считаю, что в исходный код ОКК (jcc.cpp), он висит на функции:

JNI_CreateJavaVM(&vm, (void **) &vm_env, &vm_args) 

Как решить эту проблему?

версии программы:

libapache2-mod-wsgi 2.3-1 
jcc 2.1 
python 2.5 
Apache 2.2.9-8ubuntu3 
Ubuntu 8.10 

ответ

1

Исправление этой проблемы было включено в mod_wsgi 2.4.

1

Пожалуйста, обратитесь к http://code.google.com/p/modwsgi/issues/detail?id=131 для деталей обсуждения.

Короче говоря, mod_wsgi блокирует сигналы для программы-демона, что может привести к тому, что initVM не будет работать. Кроме того, согласно Andi из jcc, initVM может быть вызван только из основного потока, и это может вызвать дополнительную проблему.

Поэтому я решил переместить поисковый код с initVM() в совершенно отдельный процесс и решить проблему.

Смежные вопросы