ошибка django при использовании wsgi и virtualenv: не удалось импортировать настройки - PullRequest
2 голосов
/ 08 января 2012

Я прочитал значительное количество постов по поводу того, что wsgi не видит файл Django settings.py, и самое лучшее, что я могу сделать, это то, что мой проект Django не находится в моем PYTHONPATH.

Сложность состоит в том, что я использую старую версию Django на системном уровне, но этот проект должен быть запущен в virtualenv.

Я установил virtualenv в / usr / local / pythonenv / выборы, и мой проект находится в / usr / local / pythonenv / выборы / src / dev / выборы

Мой файл .wsgi находится в / usr / local / pythonenv /lection / src / dev /lection / config /

Я могу запустить сервер Django, используя $ python manage.py runserver

Но при использовании apache и mod_wsgi выдается ошибка:

ImportError: Could not import settings 'election.settings' (Is it on sys.path? Does it have syntax errors?): No module named election.settings

Вот мой файл .wsgi:

import os
import sys
import site

sys.stdout = sys.stderr

HERE = env_root = os.path.abspath(os.path.dirname(__file__))
found = False
while env_root != '/':
    env_root = os.path.abspath(os.path.dirname(env_root))
    if os.path.exists(os.path.join(env_root, 'bin', 'activate')):
        found = True
        break
assert found, "didn't find a virtualenv in any parent of %s" % HERE

sitepackages_root = os.path.join(env_root, 'lib')
assert os.path.exists(sitepackages_root), "no such dir %s" % sitepackages_root
for d in os.listdir(sitepackages_root):
    if d.startswith('python'):
        site.addsitedir(os.path.join(sitepackages_root, d, 'site-packages'))
        break
else:
    raise RuntimeError("Could not find any site-packages to add in %r" % env_root)

os.environ['DJANGO_SETTINGS_MODULE'] = 'election.settings'
os.environ['PYTHON_EGG_CACHE'] = '/tmp/election-python-eggs'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

Вот трассировка:

[Sat Jan 07 21:54:19 2012] [error] [client 192.168.150.122]   File "/usr/lib/pymodules/python2.6/django/core/handlers/base.py", line 33, in load_middleware
[Sat Jan 07 21:54:19 2012] [error] [client 192.168.150.122]     for middleware_path in settings.MIDDLEWARE_CLASSES:
[Sat Jan 07 21:54:19 2012] [error] [client 192.168.150.122]   File "/usr/lib/pymodules/python2.6/django/utils/functional.py", line 269, in __getattr__
[Sat Jan 07 21:54:19 2012] [error] [client 192.168.150.122]     self._setup()
[Sat Jan 07 21:54:19 2012] [error] [client 192.168.150.122]   File "/usr/lib/pymodules/python2.6/django/conf/__init__.py", line 40, in _setup
[Sat Jan 07 21:54:19 2012] [error] [client 192.168.150.122]     self._wrapped = Settings(settings_module)
[Sat Jan 07 21:54:19 2012] [error] [client 192.168.150.122]   File "/usr/lib/pymodules/python2.6/django/conf/__init__.py", line 75, in __init__
[Sat Jan 07 21:54:19 2012] [error] [client 192.168.150.122]     raise ImportError, "Could not import settings '%s' (Is it on sys.path? Does it have syntax errors?): %s" % (self.SETTINGS_MODULE, e)
[Sat Jan 07 21:54:19 2012] [error] [client 192.168.150.122] ImportError: Could not import settings 'election.settings' (Is it on sys.path? Does it have syntax errors?): No module named election.settings

1 Ответ

3 голосов
/ 08 января 2012

Где вы добавляете '/ usr / local / pythonenv /lection / src / dev' в sys.path?

Вы также сделали остальную часть вашего файла WSGI более сложной, чем она должна быть.

Убедитесь, что вы смотрите:

http://code.google.com/p/modwsgi/wiki/WhereToGetHelp?tm=6#Conference_Presentations

Также прочитайте:

http://code.google.com/p/modwsgi/wiki/VirtualEnvironments

и используйте метод activ_thisдля активации виртуальной среды, как указано в презентации.

...