Django + mod_wsgi => Ошибка «Нет модуля с именем модели»

Мне нужна помощь с неразрешимыми ошибками Django.

Мой веб-сайт работает очень хорошо, когда я запускаю «python manage.py runserver», но когда я пытаюсь развернуть его с помощью wsgi, он продолжает делать неизвестные ошибки. Я изо всех сил пытался найти эти ошибки в Google, но не могу их решить. Может ли кто-нибудь сказать, в чем моя ошибка?

Журнал ошибок апача

[error] /usr/local/lib/python2.6/dist-packages/django/middleware/csrf.py:262: DeprecationWarning: CsrfResponseMiddleware and CsrfMiddleware are deprecated; use CsrfViewMiddleware and the template tag instead (see CSRF documentation).
[error]   DeprecationWarning
[error] [client 76.191.24.242] mod_wsgi (pid=21082): Exception occurred processing WSGI script '/srv/www/myapp/wsgi.py'.
[error] [client 76.191.24.242] Traceback (most recent call last):
[error] [client 76.191.24.242]   File "/usr/local/lib/python2.6/dist-packages/django/core/handlers/wsgi.py", line 250, in __call__
[error] [client 76.191.24.242]     self.load_middleware()
[error] [client 76.191.24.242]   File "/usr/local/lib/python2.6/dist-packages/django/core/handlers/base.py", line 47, in load_middleware
[error] [client 76.191.24.242]     raise exceptions.ImproperlyConfigured('Error importing middleware %s: "%s"' % (mw_module, e))
[error] [client 76.191.24.242] ImproperlyConfigured: Error importing middleware backends: "No module named models"

wsgi.py

import os
import sys

sys.path.append('/srv/www')
sys.path.append('/srv/www/myapp')

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

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

Апачи

<VirtualHost *:80>

    ServerName www.myapp.com
    DocumentRoot /srv/www/myapp

    RewriteEngine On
    RewriteCond %{HTTP_HOST} !^www.myapp.com$ [NC]
    RewriteRule ^(.*)$ http://www.myapp.com$1 [R,L]

    Alias /static/ /srv/www/myapp/static/

    <Directory /srv/www/myapp>
        Order allow,deny
        Allow from all
    </Directory>

    <Directory /srv/www/myapp/static>
        Order allow,deny
        Allow from all
    </Directory>

    WSGIDaemonProcess myapp.djangoserver processes=2 threads=15 display-name=%{GROUP}
    WSGIProcessGroup myapp.djangoserver
    WSGIScriptAlias / /srv/www/myapp/wsgi.py

</VirtualHost>

person JunYoung Gwak    schedule 09.04.2012    source источник
comment
Пожалуйста, покажите вашу settings и древовидную структуру проекта   -  person ilvar    schedule 09.04.2012


Ответы (1)


Сообщение об ошибке выглядит так, что вы используете серию Django 1.3 и настроили MIDDLEWARE_CLASSES с помощью backends.SomeClass (какой-то класс, определенный в каком-то модуле с именем backends), который находился на сервере разработки в текущем каталоге или по пути python, но не так, если запущен mod_wsgi.

Следует использовать полные имена классов промежуточного программного обеспечения и проверять, добавлены ли необходимые пути Python на производственный сервер. В конечном итоге используйте sys.path.append в файле wsgi.py. Похоже, что на сервере разработки вы добавили каталог некоторого пакета в путь python и написали короткое имя («бэкэнды»), тогда как вы должны добавить родительский каталог этого пакета в sys.path и написать полное имя.

(Конечно, если вы его используете: если вы используете virtualenv, убедитесь, что sys.executable является исполняемым файлом python из этого каталога virtualenv, а не из обычного Python. Не следует пытаться исправить забытый virtualenv, добавляя пути.)

person hynekcer    schedule 09.04.2012