Django 和 WSGI 以及 Apache2——网站在测试服务器中运行正常,但无法通过 Apache 加载

Django 和 WSGI 以及 Apache2——网站在测试服务器中运行正常,但无法通过 Apache 加载

好吧,我不知道我在这里做错了什么。我有一个运行 Ubuntu 的 Linode VPS。我安装了 Django 1.3、Apache2 和 mod-WSGI。我创建了我的(极其简单的)网站,添加了一些图片,有一个 CSS 表,有一个 favicon.ico,它与 Django 测试服务器完美配合。网站看起来完全符合预期——所有图片都加载了,CSS 工作正常,等等。

然后我尝试使用 Apache 运行该网站,但它不起作用。以下是我的相关配置文件:

Apache 站点启用/默认:

<VirtualHost *:80>
    ServerAdmin ***@***.com

    WSGIScriptAlias / /srv/www/django_site/django.wsgi
    AliasMatch ^/([^/]*\.css) /srv/www/django_site/static_media/css/$1
    Alias /static_media/ /srv/www/django_site/static_media/

    <Directory /srv/www/django_site>
        Options -Indexes
        Order deny,allow
        Allow from all
    </Directory>

    ErrorLog /srv/www/logs/error.log
    LogLevel warn

    CustomLog /srv/www/logs/access.log combined

Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
    Options MultiViews FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
    Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>

我的 WSGI 脚本(django.wsgi):

import os
import sys
path = '/srv/www'
if path not in sys.path:
   sys.path.append(path)

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

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

当我尝试访问该网站时,我收到 500 内部错误页面。回溯如下:

    Traceback (most recent call last):

 File "/usr/local/lib/python2.6/dist-packages/django/core/handlers/base.py", line 111, in get_response
   response = callback(request, *callback_args, **callback_kwargs)

 File "/srv/www/django_site/quote/views.py", line 9, in about
   return render_to_response("pages/about.html", context_instance=RequestContext(request))

 File "/usr/local/lib/python2.6/dist-packages/django/shortcuts/__init__.py", line 20, in render_to_response
   return HttpResponse(loader.render_to_string(*args, **kwargs), **httpresponse_kwargs)

 File "/usr/local/lib/python2.6/dist-packages/django/template/loader.py", line 181, in render_to_string
   t = get_template(template_name)

 File "/usr/local/lib/python2.6/dist-packages/django/template/loader.py", line 157, in get_template
   template, origin = find_template(template_name)

 File "/usr/local/lib/python2.6/dist-packages/django/template/loader.py", line 128, in find_template
   loader = find_template_loader(loader_name)

 File "/usr/local/lib/python2.6/dist-packages/django/template/loader.py", line 95, in find_template_loader
   mod = import_module(module)

 File "/usr/local/lib/python2.6/dist-packages/django/utils/importlib.py", line 35, in     import_module
   __import__(name)

 File "/usr/local/lib/python2.6/dist-packages/django/template/loaders/app_directories.py", line 23, in <module>
   raise ImproperlyConfigured('ImportError %s: %s' % (app, e.args[0]))

ImproperlyConfigured: ImportError quote: No module named quote

在回溯中,我不知道为什么它声称存在,No module named quote因为该模块确实存在,并且它在 Django 测试服务器中运行良好。

这应该很简单。让我困惑的是,我有第二个 Linode VPS,它运行的是 Ubuntu,还有一个不同的网站,有完全相同的配置文件,而且可以正常工作完美

我敢打赌,这只需一些简单的调整就能发挥作用。

有任何想法吗?

谢谢!

答案1

path将您的更改django.wsgi/srv/www/django_site

它期望能够将您的模块导入到其他地方的库代码中,但如果没有路径,它就无法做到这一点。

答案2

好的——我搞定了。经过一番纠结和挫折,终于找到了settings.py文件中的一个设置。我的原始settings.py文件包含已安装的应用程序部分以及我的小应用程序quote。它看起来像这样:

INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'south',
'quote',
)

该应用程序South是 MySQL 架构迁移实用程序,然后我们有一个名为的应用程序quote。它是导致所有错误的行。

解决方案:添加我的项目名在我的应用程序名称前面。如下所示:

INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'south',
'django_site.quote',
)

对,是!现在网站可以通过 Apache 正常运行。我不明白为什么这没有在 Django 测试服务器上导致类似的错误。算了。

我这次犯下的失误确实让我感到羞愧!

相关内容