Запустите Mod_Python с Mod_WSGI на Apache для Django - Ошибка сегментации (11)

Итак, я должен использовать существующий сервер для запуска моего веб-приложения Django. Сервер работает под управлением Mac OS 10.6 Server. Поставляется с предварительно установленными Python 2.3, 2.5 и 2.6. Я отредактировал мой файл http.conf, добавив в него следующее:

# Force python to run in main interpreter
WSGIApplicationGroup %{GLOBAL}

# Need the wsgi module to start django up, so point to the python file that will do that.
WSGIScriptAlias /webapp/ "/WebSites/django/webapp/apache/django.wsgi"

<Directory "/WebSites/django/webapp/apache/django.wsgi">
    Order deny,allow
    Allow from all
</Directory>

Оба mod_python и mod_wsgi определенно загружаются Apache. Доказательство:

$ apachectl -t -D DUMP_MODULES
Loaded Modules:
core_module (static)
mpm_prefork_module (static)
http_module (static)
so_module (static)

...

auth_user_host_apple_module (shared)
auth_session_apple_module (shared)
python_module (shared)
php5_module (shared)
wsgi_module (shared)
passenger_module (shared)
Syntax OK

И когда сервер Apache запускается, запускается мой файл python django.wsgi:

import os

import sys

path = '/WebSites/django/webapp'
if path not in sys.path:
    sys.path.append(path)

os.environ['DJANGO_SETTINGS_MODULE'] = 'webapp.settings'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

Поэтому, когда сервер Apache работает, в журнал ошибок Apache выводится следующее:

[Wed Aug 04 11:39:19 2010] [notice] mod_python: Creating 8 session mutexes based on 1024 max processes and 0 max threads.
[Wed Aug 04 11:39:19 2010] [notice] mod_python: using mutex_directory /tmp 
[Wed Aug 04 11:39:19 2010] [notice] Apache/2.2.14 (Unix) DAV/2 SVN/1.6.5 mod_python/3.3.1 Python/2.4.6 PHP/5.3.2 mod_wsgi/3.3 Python/2.6.1 Phusion_Passenger/2.2.11 configured -- resuming normal operations

Все выглядит хорошо, пока я не перейду к URL в моем браузере:

[Wed Aug 04 11:42:13 2010] [error] 2.6.1 (r261:67515, Feb 11 2010, 00:51:29) 
[Wed Aug 04 11:42:13 2010] [error] [GCC 4.2.1 (Apple Inc. build 5646)]
[Wed Aug 04 11:42:15 2010] [notice] child pid 78097 exit signal Segmentation fault (11)

Хорошо, я получил ошибку сегментации. Я погуглил и нашел этот http://code.google.com/p/modwsgi/wiki/InstallationIssues, который великолепен, потому что он точно описывает мою проблему. Он инструктирует меня: 1. скомпилировать python с помощью --enable-shared или 2. перекомпилировать mod_wsgi. Я не хочу компилировать python, потому что он был предустановлен на Mac OS 10.6 Server.

Поэтому я выбрал второй вариант. я бегу ./configure а потом я открываю make-файл, как он говорит, и ищу строку LDLIBS = -lpython2.3 -lpthread -ldl -lutil но я не могу найти это. Ближайшая строка, которую я могу найти, LDLIBS = -ldl но явно не могу удалить -lpython если его там нет. (Я уверен, что документы предназначены для более старой версии mod_wsgi.) Я искал в make-файле для -lpython но ничего не подходит

Кто-нибудь знает, как скомпилировать mod_wsgi 3.3, чтобы "библиотека Python на самом деле не была связана с модулем mod_wsgi".??

Кроме того, означает ли это, что mod_wsgi будет использовать Python 2.6 или более старую версию, которую, очевидно, использует mod_python?

Спасибо большое за вашу помощь!

Обновление в соответствии с просьбой Грэма Дамплтона:

$ otool -L mod_python.so
mod_python.so:
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.0.1)
$ otool -L mod_wsgi.so
mod_wsgi.so:
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.0)
    /System/Library/Frameworks/Python.framework/Versions/2.6/Python (compatibility version 2.6.0, current version 2.6.1)

1 ответ

Решение

Ваши mod_python и mod_wsgi используют разные версии. Это основная проблема, поскольку они должны использовать одну и ту же версию. Использовать ли они разделяемую библиотеку - это вторичная проблема, которая обычно не возникает в MacOS X, если только вы не используете Python, созданный вручную, который не был настроен должным образом

Бежать:

otool -L mod_python.so
otool -L mod_wsgi.so

определить зависимости каждого из Python и использовать ли разделяемую библиотеку или нет и обновить вопрос с этим выводом. Тогда можете посоветовать следующий шаг.

В общем, настоятельно рекомендуется не использовать mod_python одновременно с mod_wsgi, и в идеале вам следует вообще отказаться от mod_python и перенести приложения в решение на основе WSGI.

Также нет такой вещи как MacOS 1.6.

Другие вопросы по тегам