我在 django 中使用 mod-wsgi,在 django 中我使用 pylucene 进行全文搜索。
虽然 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/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>
最后,我发现在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