django + mod_wsgi на virtualenv не работает - PullRequest
7 голосов
/ 18 апреля 2010

Я только что завершил настройку приложения django на virtualenv, развертывание прошло гладко с использованием фабричного скрипта, но теперь .wsgi не работает, я попробовал все варианты в Интернете, но не повезло. Мой файл .wsgi:

import os
import sys
import django.core.handlers.wsgi

# put the Django project on sys.path
root_path = os.path.abspath(os.path.dirname(__file__) + '../')
sys.path.insert(0, os.path.join(root_path, 'kcdf'))
sys.path.insert(0, root_path)

os.environ['DJANGO_SETTINGS_MODULE'] = 'kcdf.settings'

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

Я получаю ту же ошибку:

[Sun Apr 18 12:44:30 2010] [error] [client 41.215.123.159] mod_wsgi (pid=16938): Exception occurred processing WSGI script '/home/kcdfweb/webapps/kcdf.web/releases/current/kcdf/apache/kcdf.wsgi'.
[Sun Apr 18 12:44:30 2010] [error] [client 41.215.123.159] Traceback (most recent call last):
[Sun Apr 18 12:44:30 2010] [error] [client 41.215.123.159]   File "/usr/local/lib/python2.6/dist-packages/django/core/handlers/wsgi.py", line 230, in __call__
[Sun Apr 18 12:44:30 2010] [error] [client 41.215.123.159]     self.load_middleware()
[Sun Apr 18 12:44:30 2010] [error] [client 41.215.123.159]   File "/usr/local/lib/python2.6/dist-packages/django/core/handlers/base.py", line 33, in load_middleware
[Sun Apr 18 12:44:30 2010] [error] [client 41.215.123.159]     for middleware_path in settings.MIDDLEWARE_CLASSES:
[Sun Apr 18 12:44:30 2010] [error] [client 41.215.123.159]   File "/usr/local/lib/python2.6/dist-packages/django/utils/functional.py", line 269, in __getattr__
[Sun Apr 18 12:44:30 2010] [error] [client 41.215.123.159]     self._setup()
[Sun Apr 18 12:44:30 2010] [error] [client 41.215.123.159]   File "/usr/local/lib/python2.6/dist-packages/django/conf/__init__.py", line 40, in _setup
[Sun Apr 18 12:44:30 2010] [error] [client 41.215.123.159]     self._wrapped = Settings(settings_module)
[Sun Apr 18 12:44:30 2010] [error] [client 41.215.123.159]   File "/usr/local/lib/python2.6/dist-packages/django/conf/__init__.py", line 75, in __init__
[Sun Apr 18 12:44:30 2010] [error] [client 41.215.123.159]     raise ImportError, "Could not import settings '%s' (Is it on sys.path? Does it have syntax errors?): %s" % (self.SETTINGS_MODULE, e)
[Sun Apr 18 12:44:30 2010] [error] [client 41.215.123.159] ImportError: Could not import settings 'kcdf.settings' (Is it on sys.path? Does it have syntax errors?): No module named kcdf.settings

моя виртуальная среда находится в / home / user / webapps / kcdfweb мое приложение /home/user/webapps/kcdf.web/releases/current/project_name мой файл wsgi home / user / webapps / kcdf.web / release / current / имя_проекта / apache / имя_проекта.wsgi

Ответы [ 4 ]

6 голосов
/ 19 апреля 2010

Я бы порекомендовал вам взглянуть на документы для использования Virtualenv с mod_wsgi. Они предлагают несколько альтернативных подходов для подключения к вашей виртуальности, которые могут работать лучше для вас.

1 голос
/ 18 апреля 2010

Вам нужно добавить каталог, который находится на две ступени выше в вашем файле wsgi, поэтому вместо:

root_path = os.path.abspath(os.path.dirname(__file__) + '../')

вы должны иметь

root_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '../', '../'))

... в качестве файла wsgiнаходится в каталоге с именем apache, в папке вашего проекта.

0 голосов
/ 19 апреля 2010

Есть ли у вас файл __init__.py в вашем каталоге "kcdf"? Без этого ваш файл настроек не может быть импортирован.

Кроме того, вы должны вызывать site.addsitedir () в каталоге site-packages для virtualenv, если вы хотите импортировать вещи из virtualenv. Подробности смотрите в документах mod_wsgi . Хотя, если он не может даже импортировать ваши настройки, я не думаю, что это ваша текущая проблема.

0 голосов
/ 18 апреля 2010

Если вы используете virtualenv, вам нужно активировать его в сценарии WSGI, чтобы правильно настроить пути.

root_path = os.path.abspath(os.path.dirname(__file__) + '../')
activate_this = os.path.join(root_path, "bin/activate_this.py")
execfile(activate_this, dict(__file__=activate_this))
...