Хорошо, поэтому мне нужно использовать существующий сервер для запуска моего веб-приложения 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#Using_ModPython_and_ModWsgi что здорово, потому что точно описывает мою проблему. Он инструктирует меня: 1. скомпилировать python с --enable-shared или 2. перекомпилировать mod_wsgi. Я не хочу компилировать python, потому что он был предустановлен на сервере Mac OS 10.6.
Поэтому я выбрал вариант номер два. я бегу ./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)
Ваши 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.