我最近设置了一个 Web 服务器,目前托管着几个静态页面网站和两个 django 项目。
这两个 django 项目是“abc”和“xyz”,分别位于主文件夹中的不同目录中。每个都有自己的 wsgi 脚本,该脚本指向各自的 settings.py 文件。
不过最近,我注意到“xyz”上有几个 500 错误。通常刷新会纠正问题,但这是不可接受的,因此我检查了 apache error.log,并注意到有时当我点击“xyz”时,会出现有关在 xyz 项目中找不到 abc.settings 的异常。不知何故,这两个项目正在交叉并相互干扰。我对 abc 的研究还不够,还不知道问题是否反之亦然。以下是我的例外情况。
[Sun Jul 08 13:30:34 2012] [error] Traceback (most recent call last):
[Sun Jul 08 13:30:34 2012] [error] File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/wsgi.py", line 219, in __call__
[Sun Jul 08 13:30:34 2012] [error] self.load_middleware()
[Sun Jul 08 13:30:34 2012] [error] File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 39, in load_middleware
[Sun Jul 08 13:30:34 2012] [error] for middleware_path in settings.MIDDLEWARE_CLASSES:
[Sun Jul 08 13:30:34 2012] [error] File "/usr/local/lib/python2.7/dist-packages/django/utils/functional.py", line 184, in inner
[Sun Jul 08 13:30:34 2012] [error] self._setup()
[Sun Jul 08 13:30:34 2012] [error] File "/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py", line 42, in _setup
[Sun Jul 08 13:30:34 2012] [error] self._wrapped = Settings(settings_module)
[Sun Jul 08 13:30:34 2012] [error] File "/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py", line 95, in __init__
[Sun Jul 08 13:30:34 2012] [error] raise ImportError("Could not import settings '%s' (Is it on sys.path?): %s" % (self.SETTINGS_MODULE, e))
[Sun Jul 08 13:30:34 2012] [error] ImportError: Could not import settings 'abc.settings' (Is it on sys.path?): No module named scalamoosh.settings
任何帮助/建议将不胜感激。干杯
您遇到的问题是,虽然 mod_wsgi 为每个 Django 应用程序提供了自己的 python 解释器,但它们仍然共享相同的操作系统环境,即 Django 存储设置模块名称的位置。我发现的解决方法是在创建 WSGI 应用程序对象之前更改 Django 在其中查找设置模块的环境变量的名称。
我稍微修改过的 wsgi.py 看起来像这样:
import os
# change the env variable where django looks for the settings module
import django.conf
django.conf.ENVIRONMENT_VARIABLE = "DJANGO_SECOND_SETTINGS_MODULE"
os.environ.setdefault("DJANGO_SECOND_SETTINGS_MODULE", "second.settings")
# This application object is used by any WSGI server configured to use this
# file. This includes Django's development server, if the WSGI_APPLICATION
# setting points here.
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)