gpt4 book ai didi

django - 在 svn/hg/git/etc 中优雅地处理特定于站点的设置/配置?

转载 作者:行者123 更新时间:2023-12-03 11:01:05 26 4
gpt4 key购买 nike

我一直在寻找一种更好的方法来处理特定于站点的设置(在本例中为 django settings.py 文件)。

settings.py 结构和字段相当一致,但在开发人员的盒子、集成、QA、测试和生产环境之间的值不同。

什么是控制设置源同时仍允许在不同框之间进行更改的优雅方式?

我还担心源代码控制中包含敏感数据(例如数据库密码),但我确实想要自动化部署。

我们使用的示例:

  • settings.py 设置常用值,然后根据主机名或用户名加载辅助设置文件。
  • 使用部署脚本将值注入(inject)到 settings.py 文件中。但这只是将问题转移到管理部署脚本而不是 settings.py 脚本。

  • 有人有特别优雅的方法吗?

    最佳答案

    创建一个主 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/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com