mod_wsgi가 데몬 모드로 구성된 경우 jcc.initvm ()가 반환되지 않습니다.
문제
나는 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
해결책
이 문제에 대한 수정은 mod_wsgi 2.4에 포함되었습니다.
다른 팁
참조하십시오 http://code.google.com/p/modwsgi/issues/detail?id=131 토론 세부 사항.
요컨대, mod_wsgi는 데몬 프로그램의 신호를 차단하여 INITVM이 작동하지 않을 수 있습니다. 또한 JCC의 Andi에 따르면 InitVM은 기본 스레드에서만 호출 될 수 있으며 추가 문제를 일으킬 수 있습니다.
따라서 검색 코드를 initvm ()로 완전히 별도의 프로세스로 옮기고 문제를 해결하기로 결정했습니다.