如何设置具有不同数据库的Git暂存和生产环境?

4
我在Git中有两个分支 - staging和production。它们都部署在同一台VPS上,其中有一个生产数据库和一个单独的staging数据库。这使我们能够在不影响生产环境的情况下进行新功能的测试。然后,当我们准备好时,我们将数据库更改从staging复制到production。
如何设置最佳方式,以便staging分支具有与production不同的数据库凭据?目前,数据库凭据存储在单个文件中。我一直在考虑使用gitignore在两个分支中忽略此文件,并手动编辑它,以便在每个分支上保持不同。这是最好的做法还是有更好的方法?
2个回答

1
我们采用级联的方法:
  1. 默认设置在一个共同的“config”文件中。
  2. 对于每个开发阶段,它都有自己的配置文件,例如我们有一个config_prod和一个config_dev
  3. 每个阶段都以不同的(系统)用户运行,并为该用户设置一个环境变量PROJ_SETTINGS,并将其指向需要加载的文件。

然后代码读取默认值,然后使用环境变量指向的资源覆盖它们(如果存在)。

这个变量的设置由我们的常规devops/automation脚本处理。我们有一些优势:

  1. 将所有配置保留在版本控制下。
  2. 轻松切换设置而无需修改源代码。

谢谢Burhan - 这听起来是个好主意。你在Apache vhost文件中设置环境变量吗? - Andrew
我们实际上运行的是nginx + supervisor,并在supervisor中设置环境变量。如果您没有特定的Apache需求,强烈推荐使用此方法。但是我不明白为什么您不能通过虚拟主机实现相同的效果。 - Burhan Khalid

0

是的,忽略 database.yml 文件是我在几个组织中使用过的一种方法。

通常我们会在源代码控制中保留一个 database.yml.sample 文件,以便更容易地进行操作。用户只需将其复制到 database.yml 并根据需要进行修改即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接