mod_wsgiをデーモンモードとして設定されている場合jcc.initVM()は戻りません。
質問
私はジャンゴでの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の/サイト利用可能/デフォルトです
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()と検索コードを移動することを決定し、問題を解決します。