【问题标题】:Configuration problems with django and mod_wsgidjango 和 mod_wsgi 的配置问题
【发布时间】:2011-02-04 22:43:08
【问题描述】:

我在让 django 使用 mod_wsgi 在 apache 2.2 上工作时遇到了问题。 Django 已安装并且 mod_wsgi 也已安装。 访问路径时我什至可以看到 404 页面,我可以登录到 django admin。 但是如果我想安装标记模块,我会收到以下错误:

 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()

几天以来我一直在尝试让它工作,并在这里阅读了几个博客和答案,但没有任何效果。

编辑:

现在我用this blog post 尝试了它,我的 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()

admin 仍在工作,但我在尝试安装标记模块时遇到了同样的错误。

【问题讨论】:

  • 你能告诉我们settings.py的绝对路径吗?
  • @Ruslan Spivak /home/jim/django/mysite/settings.py

标签: python django apache mod-wsgi


【解决方案1】:

首先,

  • 由于您的管理员工作正常,因此 wsgi 的设置很好。不要费心更改/编辑它。

为确保不是Apache/mod-wsgi设置问题,可以从生产机运行开发服务器

python manage.py runserver 0:8080

然后将浏览器指向

http://yoursite.com:8080/

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

那么,

调试这个问题:

  • 在您服务器上的 python shell 上,尝试import tagging。显然,从您的回溯来看,import tagging 是它引发错误的地方,这就是无法导入设置的原因。

  • 然后,只要删除包含标签的包,然后通过以下命令进行全新安装,它知道如何安装包。

.

sudo pip install django-tagging

【讨论】:

  • 导入标记不起作用,即使使用开发服务器: Traceback(最近一次调用最后):文件“”,第 1 行,在 ImportError: No module named tagging跨度>
  • Jimbo:这正是我的预测。您现在可以仔细阅读我的回答,来解决您的问题!
  • 以前从未使用过 pip,但它确实有效。不知道是什么导致了问题。我希望它是特定的标签,这样我以后就不会遇到与另一个包相同的问题了..谢谢
【解决方案2】:

你读过 Graham Dumpleton 的 blog post on Django and WSGI 吗?它很好地描述了一些常见的配置问题,特别涉及mysite.settingssettings

更新:请阅读以下 Graham Dumpleton 的优秀 cmets。

更新 2:正如 Graham 和 becomeGuru 所指出的,问题根本不在于 WSGI。相反,这是您安装django-tagging 的问题。接受becomingGuru的建议,使用pip安装django-tagging

【讨论】:

  • 希望它能解决您的具体问题。
  • 还是有同样的问题:/
  • 那么你可能有权限问题。 Apache 以特殊用户身份运行,而不是您。因此,Apache 用户必须可以访问 Django 站点所在的目录以及所有父目录。如果您的家庭帐户上有 rwx------则 Apache 将无法查看您的帐户内部。
  • 或者,如果站点正在运行但仅在添加时失败,那么您可能只是在设置文件中引入了语法错误。发布您修改的设置文件部分。
  • 嗯,不。因为第二种 WSGI 导入方法会导入 WSGI 脚本文件中的设置,如果其中有语法错误,您应该会得到不同的消息。顺便说一句,该博客文章并没有说将“/home/jim/django”添加到 sys.path,只是站点目录本身。不过在这种情况下应该没关系。无论如何,一切都没有关系,因为刚刚意识到原始错误消息甚至不是来自 mod_wsgi 内部。它来自直接在“setup.py”上调用的python。你在哪里做?如果在命令行上执行,您似乎没有正确设置 PYTHONPATH。 WSGI 的东西是无关紧要的。
猜你喜欢
  • 1970-01-01
  • 2011-02-13
  • 1970-01-01
  • 1970-01-01
  • 2020-01-29
  • 1970-01-01
  • 1970-01-01
  • 2011-02-18
  • 2021-02-05
相关资源
最近更新 更多