我很惊讶我找不到与此相关的现有问题。也许有一个明显的答案,我忽略了。但是,让我说我的django项目名为“foo”。 foo的设置在Two Scoops书的鼓励下在多个文件中定义。
settings/
local.py
dev.py
prod.py
Dev和prod是同一个repo的独立实例,这两个实例都是通过我的Webfaction帐户使用Apache提供的。对于开发站点,我希望它使用settings/dev.py
,对于prod站点,我希望它使用settings/prod.py
。我的wsgi.py文件包含以下行:
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "foo.settings.prod")
这是我感到困惑的地方。如何使用foo.settings.dev
加载开发网站?
我可以用多个文件替换wsgi.py,然后在每个httpd.conf文件中将WSGIScriptAlias分配给正确的wsgi文件吗?
wsgi/
dev.py
prod.py
由于
答案 0 :(得分:7)
另一种方法是让每个站点在不同的mod_wsgi守护进程组中运行。将这些守护程序进程组命名为“local”,“dev”和“prod”。
在您的WSGI脚本文件中,您可以使用:
import mod_wsgi
os.environ['DJANGO_SETTINGS_MODULE'] = 'foo.settings.%s' % mod_wsgi.process_group
换句话说,使用mod_wsgi守护程序进程组的名称来动态选择配置。
答案 1 :(得分:1)
如果我没记错的话,这两本书建议使用环境变量来设置各种设置 - 其中一个应该是django设置模块的位置。
因此,只需在开发系统中尝试设置和环境变量DJANGO_SETTINGS_MODULE
等于“foo.settings.dev”,并在生产中尝试“foo.settings.prod”。
setdefaul
只是将DJANGO_SETTINGS_MODULE
设置为默认值,以防您自己未定义 - 您可以将其注释掉或忽略它。
答案 2 :(得分:0)
您可以使用wsgi文件路径中应该选择的设置名称。
假设您的wsgi的路径是/www/production/django_project_name/wsgi.py
,那么您可以在该文件中执行以下操作:
import os
import re
match = re.match('/www/(\w+)/.+', os.path.realpath(__file__))
environment = match.group(1)
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings." + environment)