jcc.initVM () не возвращается, когда mod_wsgi настроен как режим демона - PullRequest
3 голосов
/ 14 февраля 2009

Я использую mod-wsgi с django, а в django я использую пилицен для полнотекстового поиска.

Хотя 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

Ответы [ 2 ]

1 голос
/ 25 июня 2009

Исправление для этой проблемы было включено в mod_wsgi 2.4.

1 голос
/ 17 февраля 2009

Пожалуйста, обратитесь к http://code.google.com/p/modwsgi/issues/detail?id=131 для деталей обсуждения.

Короче говоря, mod_wsgi будет блокировать сигналы для программы-демона, что может привести к тому, что initVM не будет работать. Кроме того, в соответствии с Andi из jcc, initVM можно вызывать только из основного потока, что также может вызвать дальнейшие проблемы.

Поэтому я решил перенести код поиска с помощью initVM () в совершенно отдельный процесс и решил проблему.

...