#python #apache #segmentation-fault #mod-wsgi #expat-parser
#python #apache #ошибка сегментации #мод-wsgi #expat-анализатор
Вопрос:
(Отказ от ответственности: я только начал использовать Linux и не имею большого опыта в настройке Apache и Python.)
У меня довольно распространенная проблема, которая более подробно объясняется здесьhttp://code.google.com/p/modwsgi/wiki/IssuesWithExpatLibrary. В принципе, я на 99% уверен, что моя главная проблема заключается в том, что мой Apache использует версию 1.95.7 библиотеки expat, тогда как мой Python использует версию 2.0.1 библиотеки expat; таким образом, когда я использую их вместе, я получаю ошибку сегментации.
Как объясняется по ссылке в самом низу страницы, мне нужно заменить / обновить версию библиотеки expat, которая используется Apache, на версию, используемую Python. Как бы мне это сделать? (Имейте в виду, что я очень неопытен в такого рода вещах.)
РЕДАКТИРОВАТЬ: Эта проблема была решена. Ниже я задокументировал все, что я сделал для установки Apache, сборки Python из исходного кода, установки mod_wsgi и решения страшной проблемы с expat, для моей справки и для всех, кто сталкивается с подобной проблемой.
1) Установил Ubuntu с Wubi
Установка Apache
2) В Ubuntu загруженный исходный код Apache Unix httpd-2.2.21.tar.gz
3) Извлек исходный код из Apache HTTPDd tarbell:
gzip -d httpd-2.2.21.tar.gz
tar xvf httpd-2.2.21.tar
4) Настроил дерево исходных текстов Apache HTTPd из извлеченного каталога:
sudo ./configure --prefix=/usr/local/apache2
5) Создал различные части, которые формируют пакет Apache HTTPd:
sudo make
6) Установил пакет в каталог, который я указал на шаге 4
sudo make install
7) Запущен HTTP-сервер Apache:
sudo /usr/local/apache2/bin/apachectl -k start
8) Проверил localhost, и он напечатал «Это работает!»
9) Остановлен HTTP-сервер Apache:
sudo /usr/local/apache2/bin/apachectl -k stop
Установка Python из исходного кода
10) Извлек все распространенные пакеты, необходимые для сборки чего-либо (например, компилятор и т.д.)
sudo apt-get install build-essential
11) Отредактированные исходные тексты.перечислите файл в /etc / apt, добавив в конец точно такие же строки «deb», содержащиеся в файле, за исключением «deb-src».:
sudo nano /etc/apt/sources.list
12) Обновленный apt-get распознает изменение:
sudo apt-get update
13) Fetched all the libraries needed to build Python:
sudo apt-get build-dep python2.7
14) Downloaded python source code Python-2.7.2.tgz, extracted it, and ran the following from within the directory:
sudo ./configure --enable-shared --prefix=/usr/local
15) Built Python:
sudo make
16) Installed Python:
sudo make install
Installing mod_wsgi
17) Downloaded mod_wsgi source code tar ball mod_wsgi-3.3.tar.gz
18) Unpacked and configured with python from within unpacked directory:
sudo ./configure --with-apxs=/usr/local/apache2/bin/apxs
--with-python=/usr/local/bin/python2.7
19) Built the configured package:
sudo make
20) Installed in Apache modules:
sudo make install
21) Downloaded Django-1.3.1.tar.gz
22) Extracted file:
tar xzvf Django-1.3.1.tar.gz
23) Installed Django project from within directory:
sudo python setup.py install
24) Отредактированный файл Apache httpd.conf:
sudo nano /usr/local/apache2/conf/httpd.conf
Добавлена следующая директива в конец файла:
LoadModule wsgi_module /usr/local/apache2/modules/mod_wsgi.so
WSGIScriptAlias / /usr/local/lib/python2.7/site-packages/django/test.wsgi
<Directory /usr/local/lib/python2.7/site-packages/django>
Order deny,allow
Allow from all
</Directory>
25) Создал тестовый файл в каталоге проекта django:
sudo nano /usr/local/lib/python2.7/site-packages/django/test.wsgi
В файл добавлено следующее содержимое:
def application(environ, start_response):
status = '200 OK'
output = 'Hello World!'
response_headers = [('Content-type', 'text/plain'),
('Content-Length', str(len(output)))]
start_response(status, response_headers)
return [output]
26) Запустил Apache:
sudo /usr/local/apache2/bin/apachectl -k start
27) Протестировал localhost, и он напечатал «Привет, мир!»
28) Остановлен Apache:
sudo /usr/local/apache2/bin/apachectl -k stop
Тестирование страшной проблемы с Expat:
29) Отредактированный файл test.wsgi:
sudo nano /usr/local/lib/python2.7/site-packages/django/test.wsgi
Добавлено следующее содержимое в начало файла:
import pyexpat
30) Запустил Apache:
sudo /usr/local/apache2/bin/apachectl -k start
31) Выводится «Привет, мир!» Бог есть.
32) Остановлен Apache:
$ sudo /usr/local/apache2/bin/apachectl -k stop
Комментарии:
1. Какую версию Python вы используете? Это предназначено только для воздействия на старые версии Python, если только ваш дистрибутив не ошибся с тем, как Python был собран и заменил собственный expat Python или заставил его связать с другим expat.
2. 2.7.2 О, действительно? Я надеюсь на это. Причина, по которой я не так уверен, заключается в том, что я тестировал импорт pyexpat, и когда я проверил localhost, он должен был напечатать «Hello World», но этого не сделал. Затем я проверил свой журнал ошибок Apache и увидел ожидаемую ошибку ошибки сегментации.
3. Дистрибутив явно встроил Python таким образом, чтобы использовать внешнюю реализацию pyexpat, что вызывает проблему. Возможно, вам придется пожаловаться разработчикам дистрибутива. Это или создайте Python самостоятельно из исходного кода, который по умолчанию будет использовать внутреннюю реализацию expat. Затем нужно перестроить mod_wsgi против этого Python.
4. Эй, Грэм, как бы я сам собрал Python из исходного кода? Извините, если это звучит как очевидный вопрос. Кроме того, вы уверены, что я не должен просто обновлять версию библиотеки expat, используемой Apache (как, кажется, предполагает документация)? В любом случае, я даже не знаю, как бы я обновил версию библиотеки expat, используемой Apache, даже если бы мне это было нужно.
Ответ №1:
Ищете это? Это довольно хорошо известно — я сам следил за этим пару раз.
Комментарии:
1. Нет, это точно такая же информация в ссылке, которую я опубликовал. Она практически скопирована и вставлена.
2. Я знаю, что мне нужно заменить / обновить версию библиотеки expat, используемой Apache. Что мне нужно знать, так это то, как я на самом деле буду это делать?
3. Ссылка недоступна.
4. ссылка НЕДОСТУПНА!!!
5. Ссылка разорвана