我一直在寻找一种更好的方法来处理特定于站点的设置(在本例中为 django settings.py 文件)。
settings.py 结构和字段相当一致,但在开发人员的盒子、集成、QA、测试和生产环境之间的值不同。
什么是控制设置源同时仍允许在不同框之间进行更改的优雅方式?
我还担心源代码控制中包含敏感数据(例如数据库密码),但我确实想要自动化部署。
我们使用的示例:
有人有特别优雅的方法吗?
最佳答案
创建一个主 settings.py 文件,其中应包括以下内容:
# Pull in hostname-based changes.
import socket
HOSTNAME = socket.gethostname().lower().split('.')[0].replace('-','')
try:
exec "from myproject.settings.host_%s import *" % HOSTNAME
except ImportError:
pass
# Pull in the local changes.
try:
from myproject.settings.local import *
except ImportError:
pass
现在,您为您关心的每个主机名创建一个新的设置文件。但这些真的很小。您的每个生产服务器的文件只包含:
from myproject.settings.production import *
并且您的登台服务器具有:
from myproject.settings.staging import *
现在,您可以创建一个 production.py 文件,其中包含用于设置的生产覆盖、一个 staging.py 等。您可以为服务器扮演的每个角色创建新文件。
最后,您可以在具有本地覆盖的任何机器(包括开发人员的机器)上创建一个 local.py 文件,并将此文件标记为源代码管理忽略,这样更改就不会被 checkin 。
我们已经使用这种结构多年,它工作得非常好。
关于django - 在 svn/hg/git/etc 中优雅地处理特定于站点的设置/配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1406892/