我使用MOD-WSGI Django的,并且在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的/网站可用/默认:

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
有帮助吗?

解决方案

对于此问题的修复包括在mod_wsgi的2.4。

其他提示

请参阅 http://code.google.com/ p / modwsgi /问题/细节?ID = 131 ,在讨论细节。

总之, mod_wsgi的,它将阻止守护程序,这可能使initVM不工作的信号。此外,根据 从JCC岸堤,initVM只能从主线程调用,并且它可能会导致进一步的问题,以及

因此,我决定与initVM()的搜索码移动到一个完全独立的过程,并解决了这个问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top