Django与mod_wsgi的配置问题

5 投票
2 回答
11919 浏览
提问于 2025-04-15 21:18

我在用Apache 2.2和mod_wsgi配置Django时遇到了一些问题。Django和mod_wsgi都已经安装好了。我能看到404页面,也能登录Django的管理后台。但是,当我想安装标签模块时,就出现了以下错误:

 Traceback (most recent call last):
   File "setup.py", line 49, in <module>
  version_tuple = __import__('tagging').VERSION
   File "/home/jim/django-tagging/tagging/__init__.py", line 3, in <module>
  from tagging.managers import ModelTaggedItemManager, TagDescriptor
   File "/home/jim/django-tagging/tagging/managers.py", line 5, in <module>
  from django.contrib.contenttypes.models import ContentType
   File "/usr/lib/python2.5/site-packages/django/contrib/contenttypes/models.py", line 1, in <module>
  from django.db import models
   File "/usr/lib/python2.5/site-packages/django/db/__init__.py", line 10, in <module>
  if not settings.DATABASE_ENGINE:
   File "/usr/lib/python2.5/site-packages/django/utils/functional.py", line 269, in __getattr__
  self._setup()
   File "/usr/lib/python2.5/site-packages/django/conf/__init__.py", line 40, in _setup
  self._wrapped = Settings(settings_module)
   File "/usr/lib/python2.5/site-packages/django/conf/__init__.py", line 75, in __init__
  raise ImportError, "Could not import settings '%s' (Is it on sys.path? Does it have syntax errors?): %s" % (self.SETTINGS_MODULE, e)
 ImportError: Could not import settings 'mysite.settings' (Is it on sys.path? Does it have syntax errors?): No module named mysite.settings

这是我的httpd.conf配置文件:

 Alias /media/ /home/jim/django/mysite/media/

 <Directory /home/jim/django/mysite/media>
  Order deny,allow
  Allow from all
 </Directory>

 Alias /admin/media/ "/usr/lib/python2.5/site-packages/django/contrib/admin/media/"

 <Directory "/usr/lib/python2.5/site-packages/django/contrib/admin/media/">
  Order allow,deny
  Allow from all
 </Directory>

 WSGIScriptAlias /dj /home/jim/django/mysite/apache/django.wsgi

 <Directory /home/jim/django/mysite/apache>
  Order deny,allow
  Allow from all
 </Directory>

这是我的django.wsgi文件:

import sys, os

sys.path.append('/home/jim/django')
sys.path.append('/home/jim/django/mysite')

os.chdir('/home/jim/django/mysite')
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'

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

我尝试了几天想让这个工作,读了好几个博客和这里的回答,但都没有成功。

编辑:

现在我试着按照这篇博客的内容修改我的wsgi文件,现在看起来是这样的:

import sys
sys.path.insert(0, '/home/jim/django/mysite')
sys.path.insert(0, '/home/jim/django')

import settings

import django.core.management
django.core.management.setup_environ(settings)
utility = django.core.management.ManagementUtility()
command = utility.fetch_command('runserver')

command.validate()

import django.conf
import django.utils

django.utils.translation.activate(django.conf.settings.LANGUAGE_CODE)

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

管理后台还是能用,但当我尝试安装标签模块时,还是出现了同样的错误。

2 个回答

4

你有没有看过Graham Dumpleton写的关于Django和WSGI的博客文章? 这篇文章很好地讲解了一些常见的配置问题,特别提到了mysite.settingssettings之间的区别。

更新:请查看Graham Dumpleton在下面的精彩评论。

更新2:正如Graham和becomingGuru所指出的,问题根本不在WSGI上。实际上,是你安装的django-tagging出了问题。听从becomingGuru的建议,使用pip来安装django-tagging

4

首先,

  • 因为你的管理员功能正常,所以wsgi的设置是好的。别费心去改动它。

为了确保不是Apache/mod-wsgi设置的问题,你可以在生产机器上运行开发服务器。

python manage.py runserver 0:8080

然后在浏览器中输入

http://yoursite.com:8080/

你必须看到完全相同的行为。

接下来,

为了调试这个问题:

  • 在你服务器上的Python命令行中,试试 import tagging。从你的错误信息来看,import tagging 是出错的地方,这也是为什么设置无法被导入。

  • 然后,直接删除包含tagging的包,并通过以下命令重新安装,这个命令会知道如何正确安装包。

.

sudo pip install django-tagging

撰写回答