Apache+WSGI+Python+Django дает мне странные ошибки
Вот краткое изложение того, что я сделал
- Я переместил свой проект Django в
/pymodules/honstreams
- Я установил apache2 и apache2-dev
- Я установил pythonbrew, установил Python-2.7.2 и переключился на него
- Я установил PYTHONPATH на
/pymodules
в/etc/profile
и подтвердил, что это работает - Я скомпилировал mod-wsgi.so, используя правильные версии Python и Apache
- Я добавил модуль wsgi в httpd.conf
Я создал wsgi_handler.py в соответствии с инструкциями этого руководства. Это оно:
import sys import os sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/..') os.environ['DJANGO_SETTINGS_MODULE'] = 'honstreams.settings' import django.core.handlers.wsgi application = django.core.handlers.wsgi.WSGIHandler()
Я настроил apache VirtualHost в соответствии с тем же руководством. Я редактировал
/etc/apache2/sites-enabled/000-default
к этому:<VirtualHost *> ServerName www.honstreams.com ServerAlias *honstreams.com Alias /admin_media /root/.pythonbrew/pythons/Python-2.7.2/lib/python2.7/site-packages/django/contrib/ad$ <Location /admin_media> Order allow,deny Allow from all </Location> Alias /media /root/honstreams/website/media <Location /media> Order allow,deny Allow from all </Location> WSGIScriptAlias / /root/honstreams/wsgi_handler.py WSGIDaemonProcess honstreams user=www-data group=www-data processes=1 threads=10 WSGIProcessGroup honstreams </VirtualHost>
Я запускаю apache без ошибок. Я пытаюсь получить доступ к корневой папке с http, и /var/log/apache2/error.log
повторяет:
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
ImportError: No module named site
Честно говоря, я понятия не имею, что делать дальше. Я не знаю что <prefix>
или же <exec_prefix>
и Google не особенно помогает. Я предполагаю, что мне нужно установить переменную PYTHONHOME для пользовательских www-данных.
Также я не пытаюсь импортировать модуль с именем "site" в любой из моих кодов, где угодно, когда-либо. Поэтому я предполагаю, что это исправит себя, если я исправлю вышеупомянутые ошибки.
Любая помощь будет оценена!
РЕДАКТИРОВАТЬ: я установил PYTHONHOME /root/.pythonbrew/pythons/Python-2.7.2
в /etc/profile
, Я получаю ту же ошибку, что и раньше. Есть ли /etc/profile
иметь какой-либо эффект, когда пользователь не входит в оболочку?
2 ответа
Я все время знал, что мои разрешения были правильными в моей установке Python. Чего я не знал, так это того, что если бы папка, находящаяся выше в иерархии, имела более ограничивающие разрешения, это оказало бы влияние.
Решение состояло в том, чтобы вся цепочка каталогов от root до моей установки на python имела разрешения rx.
Во-первых, я бы последовал совету Грэма здесь: https://stackoverflow.com/questions/6946413/interesting-problem-with-python-2-7-on-centos-is-this-an-issue-with-my-build/6948092. так как вы используете pythonbrew, для сборки с опциями используйте --configure="- enable-shared --wh what-other-options-you-need-go-here". Вам может понадобиться или не понадобиться символическая ссылка вокруг ваших библиотек и явное добавление LD_LIBRARY_PATH в ваш.bashrc. НТН!