好吧,我不知道我在这里做错了什么。我有一个运行 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 测试服务器上导致类似的错误。算了。
我这次犯下的失误确实让我感到羞愧!