Запустите 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.