0

我需要一些关于无法解决的 Django 错误的帮助。

当我“python manage.py runserver”时,我的网站运行良好,但是当我尝试使用 wsgi 部署它时,它不断出现未知错误。我尽力用谷歌搜索这些错误,但我无法解决。谁能告诉我的错误是什么?

阿帕奇错误日志

[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>
4

1 回答 1

0

错误消息看起来您使用 Django 1.3 系列,并且您自定义了 MIDDLEWARE_CLASSES backends.SomeClass(在某些名为 的模块中定义的某个类backends),该类位于当前目录或 python 路径中的开发服务器上,但如果由 mod_wsgi 启动,则不是这样。

应使用中间件类的全名,并验证是否在生产服务器上添加了必要的 python 路径。最终在 wsgi.py 文件中使用 sys.path.append。看起来,在开发服务器上,您将某个包的目录添加到 python 路径并编写了短名称('backends'),而您应该将此包的父目录添加到 sys.path 并写入全名。

(当然 - 如果你使用它:如果你使用 virtualenv,请确认 sys.executable 是来自该 virtualenv 目录的 python 可执行文件,而不是来自普通 Python。不应该尝试通过添加路径来修复被遗忘的 virtualenv。)

于 2012-04-09T10:34:19.797 回答