django_cms ImproperlyConfigured: ошибка импорта промежуточного программного обеспечения cms.middleware.media

Я перемещаю приложение, которое использует django_cms, с одного сервера, на котором все работало, на другой и провел последние 4 часа, пытаясь найти причину этой ошибки. Предложения очень приветствуются!

 mod_wsgi (pid=21972): Exception occurred within WSGI script '/var/www/vhosts/compdoctest.com/django/compdoc/django.wsgi'.
 Traceback (most recent call last):
   File "/usr/lib/python2.5/site-packages/django/core/handlers/wsgi.py", line 230, in __call__
     self.load_middleware()
   File "/usr/lib/python2.5/site-packages/django/core/handlers/base.py", line 42, in load_middleware
     raise exceptions.ImproperlyConfigured('Error importing middleware %s: "%s"' % (mw_module, e))
 ImproperlyConfigured: Error importing middleware cms.middleware.media: "No module named media"

Эта строка является последней в списке промежуточного программного обеспечения в файле settings.py.

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'cms.middleware.page.CurrentPageMiddleware',
    'cms.middleware.user.CurrentUserMiddleware',
    'cms.middleware.multilingual.MultilingualURLMiddleware',
    'cms.middleware.media.PlaceholderMediaMiddleware',
    )

Если я удаляю последнюю строку, то код продолжается и позже падает, говоря, что элемент необходим в промежуточном программном обеспечении.

Я использую немного другую версию django, 1.2.1 final на старом работающем сервере и 1.2.3 final на новом сервере.

Все что я пробовал:

  • Та же версия django_cms - 2.1.0 beta 3 - которая использовалась на старом сервере
  • Последняя версия на github - 2.1.0.beta2-550 Помещение папок cms, mptt, menu, publisher в папку
  • приложение из Python импортирует
  • погуглил (ни у кого нет той же проблемы, которую я могу найти)
  • файл промежуточного программного обеспечения напрямую (без проблем)

Результат открытия в python:

python manage.py shell        
Python 2.5.2 (r252:60911, Jan 20 2010, 23:14:04) 
[GCC 4.2.4 (Ubuntu 4.2.4-1ubuntu3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> import cms.middleware.media
>>> cms.middleware.media.__file__
'/var/www/vhosts/compdoctest.com/django/compdoc/cms/middleware/media.pyc'
>>> from django.forms.widgets import Media
>>> import cms.middleware.media
>>> 

2 ответа

Решение

Спасибо моему другу Бартошу Пташинскому за то, что он указал мне правильное направление. Это была проблема пути. Добавил это в начало файла settings.py и все это волшебным образом заработало.

sys.path.insert (0, '/ path_to_app / app /')

И как он указал:

Исключение в сценарии WSGI означает, что путь во время работы под веб-сервером был неправильным, это совершенно другая среда, чем оболочка manage.py

У меня такая же проблема. Но так как это происходит только при использовании mod_wsgi, другое решение добавляет путь в конфигурацию apache (а не редактирует syspath внутри setting.py):

    # mod_wsgi settings
WSGIDaemonProcess name user=user group=group python-path=/app_path/app/:/app_path/lib/python2.6/site-packages/:/app_path/
WSGIProcessGroup polykum

Включение пакетов сайта в путь также приведено на примере Джона Блэка.

Другие вопросы по тегам