Описание проблемы
Проблемы, возникающие при попытке загрузить веб-сайт Django, использующий
mod_wsgi, python 2.7 и virtualenv, это то, что я получаю ошибку 500, когда захожу на сайт в своем браузере. когда
Я смотрю на ошибку, созданную в моем журнале Apache, я получаю следующее ...
[Tue Oct 11 09:32:30 2011] [error] [client 206.130.131.226] mod_wsgi (pid=69270): Exception occurred processing WSGI script '/Volumes/Ontario/Sites/emails/config/apache/dev.emails.wenatcheeworld.com.wsgi'.
[Tue Oct 11 09:32:30 2011] [error] [client 206.130.131.226] Traceback (most recent call last):
[Tue Oct 11 09:32:30 2011] [error] [client 206.130.131.226] File "/Library/Python/2.5/site-packages/Django-1.2.1-py2.5.egg/django/core/handlers/wsgi.py", line 230, in __call__
[Tue Oct 11 09:32:30 2011] [error] [client 206.130.131.226] self.load_middleware()
[Tue Oct 11 09:32:30 2011] [error] [client 206.130.131.226] File "/Library/Python/2.5/site-packages/Django-1.2.1-py2.5.egg/django/core/handlers/base.py", line 33, in load_middleware
[Tue Oct 11 09:32:30 2011] [error] [client 206.130.131.226] for middleware_path in settings.MIDDLEWARE_CLASSES:
[Tue Oct 11 09:32:30 2011] [error] [client 206.130.131.226] File "/Library/Python/2.5/site-packages/Django-1.2.1-py2.5.egg/django/utils/functional.py", line 276, in __getattr__
[Tue Oct 11 09:32:30 2011] [error] [client 206.130.131.226] self._setup()
[Tue Oct 11 09:32:30 2011] [error] [client 206.130.131.226] File "/Library/Python/2.5/site-packages/Django-1.2.1-py2.5.egg/django/conf/__init__.py", line 40, in _setup
[Tue Oct 11 09:32:30 2011] [error] [client 206.130.131.226] self._wrapped = Settings(settings_module)
[Tue Oct 11 09:32:30 2011] [error] [client 206.130.131.226] File "/Library/Python/2.5/site-packages/Django-1.2.1-py2.5.egg/django/conf/__init__.py", line 75, in __init__
[Tue Oct 11 09:32:30 2011] [error] [client 206.130.131.226] raise ImportError("Could not import settings '%s' (Is it on sys.path? Does it have syntax errors?): %s" % (self.SETTINGS_MODULE, e))
[Tue Oct 11 09:32:30 2011] [error] [client 206.130.131.226] ImportError: Could not import settings 'config.settings' (Is it on sys.path? Does it have syntax errors?): No module named config.settings
Трассировка не имеет смысла, поскольку загружаемые файлы взяты из глобальной библиотеки python 2.5.
Информация о настройке Virtualenv
Я установил python 2.7 на OS X Server, который работает под управлением OS X 10.5.8. я
установленный Python с использованием
Python 2.7.2 Mac OS X 32-битный установщик i386 / PPC . На сервере в настоящее время установлен virtualenv 1.6.4.
Я настроил использование virtualenv для нового веб-сайта, используя следующее
$ cd /usr/local/virtualenvs
$ virtualenv --no-site-packages -p /usr/local/bin/python2.7 dev.emails
Затем я устанавливаю все необходимые пакеты python. Когда я запускаю pip freeze
, это мой вывод
$ pip freeze
Django==1.3
PIL==1.1.7
South==0.7.3
amqplib==1.0.2
anyjson==0.3.1
boto==2.0
celery==2.2.7
django-celery==2.2.4
django-compressor==0.9.2
django-grappelli==2.3.4
django-picklefield==0.1.9
feedparser==5.0.1
html2text==3.02
kombu==1.4.1
lxml==2.2.2
psycopg2==2.4.2
pyparsing==1.5.6
python-dateutil==1.5
python-sendgrid==0.2.0dev
redis==2.4.9
requests==0.6.2
wsgiref==0.1.2
Действия по устранению неисправностей
Я создал скрипт под названием path_test.py
, чтобы проверить мой путь к virtualenv ...
import os
import sys
# Activate Python Virtual Enviroment
activate_this = '/usr/local/virtualenvs/dev.emails/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))
# start django
import django.core.handlers.wsgi
os.environ['DJANGO_SETTINGS_MODULE'] = 'config.settings'
for p in sys.path:
print p
application = django.core.handlers.wsgi.WSGIHandler()
Когда я запускаю скрипт, используя python path_test.py
, я получаю следующий вывод:
/usr/local/virtualenvs/dev.emails/lib/python2.5/site-packages
/Volumes/Ontario/Sites/emails/bin
/Library/Python/2.5/site-packages/MySQL_python-1.2.2-py2.5-macosx-10.5-i386.egg
/Library/Python/2.5/site-packages/paramiko-1.7.4-py2.5.egg
/Library/Python/2.5/site-packages/simplejson-2.0.7-py2.5-macosx-10.5-i386.egg
/Library/Python/2.5/site-packages/python_ldap-2.3.7-py2.5-macosx-10.5-i386.egg
/Library/Python/2.5/site-packages/lxml-2.2.2-py2.5-macosx-10.5-i386.egg
/Library/Python/2.5/site-packages/pytz-2010h-py2.5.egg
/Library/Python/2.5/site-packages/python_openid-2.2.4-py2.5.egg
/Library/Python/2.5/site-packages/Markdown-2.0.3-py2.5.egg
/Library/Python/2.5/site-packages/django_authopenid-1.0.1-py2.5.egg
/Library/Python/2.5/site-packages/Django-1.2.1-py2.5.egg
/Library/Python/2.5/site-packages/django_profiles-0.2-py2.5.egg
/Library/Python/2.5/site-packages/django_openid_consumer-0.1.1-py2.5.egg
/Library/Python/2.5/site-packages/setuptools-0.6c11-py2.5.egg
/Library/Python/2.5/site-packages/ipython-0.10-py2.5.egg
/Library/Python/2.5/site-packages/httplib2-0.6.0-py2.5.egg
/Library/Python/2.5/site-packages/guess_language-0.2-py2.5.egg
/Library/Python/2.5/site-packages/django_ratings-0.3.4-py2.5.egg
/Library/Python/2.5/site-packages/pip-0.8.1-py2.5.egg
/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python25.zip
/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5
/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/plat-darwin
/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/plat-mac
/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/plat-mac/lib-scriptpackages
/System/Library/Frameworks/Python.framework/Versions/2.5/Extras/lib/python
/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-tk
/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-dynload
/Library/Python/2.5/site-packages
/Library/Python/2.5/site-packages/PIL
/System/Library/Frameworks/Python.framework/Versions/2.5/Extras/lib/python/PyObjC
Если я сначала активирую virtualenv, используя source /path/to/virtualenv/bin/activate
, а затем запускаю python path_test.py
, я получаю следующий вывод:
/usr/local/virtualenvs/dev.emails/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg
/usr/local/virtualenvs/dev.emails/lib/python2.7/site-packages/pip-1.0.2-py2.7.egg
/usr/local/virtualenvs/dev.emails/lib/python2.7/site-packages/lxml-2.2.2-py2.7-macosx-10.3-intel.egg
/usr/local/virtualenvs/dev.emails/lib/python2.7/site-packages
/usr/local/virtualenvs/dev.emails/lib/python2.7/site-packages/PIL
/Volumes/Ontario/Sites/emails/bin
/Volumes/Ontario/local/virtualenvs/dev.emails/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg
/Volumes/Ontario/local/virtualenvs/dev.emails/lib/python2.7/site-packages/pip-1.0.2-py2.7.egg
/Volumes/Ontario/local/virtualenvs/dev.emails/lib/python2.7/site-packages/lxml-2.2.2-py2.7-macosx-10.3-intel.egg
/Volumes/Ontario/local/virtualenvs/dev.emails/lib/python27.zip
/Volumes/Ontario/local/virtualenvs/dev.emails/lib/python2.7
/Volumes/Ontario/local/virtualenvs/dev.emails/lib/python2.7/plat-darwin
/Volumes/Ontario/local/virtualenvs/dev.emails/lib/python2.7/plat-mac
/Volumes/Ontario/local/virtualenvs/dev.emails/lib/python2.7/plat-mac/lib-scriptpackages
/Volumes/Ontario/local/virtualenvs/dev.emails/lib/python2.7/lib-tk
/Volumes/Ontario/local/virtualenvs/dev.emails/lib/python2.7/lib-old
/Volumes/Ontario/local/virtualenvs/dev.emails/lib/python2.7/lib-dynload
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages
/Volumes/Ontario/local/virtualenvs/dev.emails/lib/python2.7/site-packages
/Volumes/Ontario/local/virtualenvs/dev.emails/lib/python2.7/site-packages/PIL
/Volumes/Ontario/Sites/emails
На данный момент я почти уверен, что проблема в том, что activate_this.py
в virtualenv не устанавливает правильную sys.path
.