2009-02-14 59 views
3

我正在使用mod-wsgi和django,並且在Django中我使用pylucene來進行全文搜索。當mod_wsgi被配置爲守護進程模式時,jcc.initVM()不會返回

雖然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') 
.... 

我重新啓動我的Apache後,並從我的瀏覽器的請求,我發現/var/log/apache2/error.log 只有:

jcc.initVM 

這意味着它卡在行jcc.initVM()。 (如果mod_wsgi的配置爲嵌入模式,是沒有問題的。)

這裏是我的/ etc/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的源代碼(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不起作用。此外根據 jcc的Andi,initVM只能從主線程調用,並且還可能導致進一步的問題。

因此,我決定將搜索代碼與initVM()移到一個完全獨立的進程並解決問題。

相關問題