托管多个django网站的问题(设置交叉)

Sca*_*osh 2 python apache django

我最近设置了一个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
Run Code Online (Sandbox Code Playgroud)

任何帮助/建议将不胜感激。干杯

Joe*_*Day 5

您遇到的问题是,尽管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()
Run Code Online (Sandbox Code Playgroud)