如何为Apache站点指定环境变量?
我有一个由Apache + ModWSGI服务的多租户Django网站。每个站点使用相同的Django代码,但是它们的设置略有不同。一个环境变量告诉Django要加载哪些设置。当前,我正在获得一个单独的wsgi_<site_name>.py
文件,其中包含适用于每个站点的变量,但这违反了DRY规则。相反,我想将此变量放在Apache网站配置中,并为所有网站使用单个wsgi.py
文件。
我找不到有关如何执行此操作的太多信息。我发现这个one old blog post暗示我可以使用Apache配置语法:
SetEnv SITE somename
以及类似以下的wsgi文件:
import os, sys
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
PROJECT_DIR = os.path.abspath(os.path.join(BASE_DIR, '..'))
sys.path.append(PROJECT_DIR)
os.environ['DJANGO_SETTINGS_MODULE'] = 'app.settings'
from django.core.wsgi import get_wsgi_application
_application = get_wsgi_application()
def application(environ, start_response):
os.environ['SITE'] = environ['SITE']
return _application(environ, start_response)
但这无效。如果我打印出SITE
变量,则Django将永远不会收到值“ somename”并显示默认值。
据我所知mod_env组件仍受支持,并且我已经确认服务器上已安装并启用了该组件。
答案 0 :(得分:0)
问题是我打电话给get_wsgi_application()
太早了。正确的代码是:
from django.core.wsgi import get_wsgi_application
def application(environ, start_response):
os.environ['SITE'] = environ['SITE']
_application = get_wsgi_application()
return _application(environ, start_response)