2

通过环境协调配置更改的好方法是什么?

为了将我们的代码与环境分离,我们将所有环境配置移至外部文件。所以也许应用程序会寻找${application.config.dir}/app.propertiesapp.properties可能包含:

user.auth.endpoint=http://some.url/user
user.auth.apikey=abcd12314

问题是,user.auth.endpoint在测试时需要指向测试资源,在临时环境中需要指向临时资源,在生产时需要指向生产资源。

我们可以维护配置文件的不同副本,但这会违反 DRY 并变得非常笨重(有 20 多个生产环境)。

有什么好的方法来管理这个?我应该寻找什么工具?

4

3 回答 3

1

外部化配置是一个好主意,您可以将它们一直外部化到环境变量。

环境变量很容易在部署之间更改,而无需更改任何代码;与配置文件不同,它们被意外签入代码仓库的可能性很小;与自定义配置文件或其他配置机制(如 Java 系统属性)不同,它们是与语言和操作系统无关的标准。

来自http://12factor.net/config

于 2013-05-18T11:06:20.253 回答
1

我知道这三种方法。

第一种方法是为您的应用程序编写一个 Python“包装器”脚本。该脚本将找出一些环境细节,例如主机名、用户名和环境变量的值,然后构造适当的配置文件(或一组命令行选项)传递给实际应用程序。

第二种方法是在您的应用程序中嵌入一个脚本语言(Python、Lua 和 Tcl)的解释器。这使您可以使用该嵌入式脚本语言的语法编写配置文件。通过这种方式,配置文件可以利用脚本语言的特性,例如查询环境变量或执行 shell 命令(如hostname)和使用 if-then-else 语句来适当地设置变量的能力。

第三种方法(如果您使用 C++ 或 Java)是使用开源Config4*库(免责声明,我是该库的主要开发者)。我建议您阅读“Config4* 入门”手册的第 2 章,了解其灵活的语法如何使单个配置文件适应多种环境的示例。

于 2013-05-19T16:44:14.237 回答
1

你可以看看http://www.configapp.com。您使用 1 个配置文件,并在环境之间切换/选项卡。在内部它只是 1 个配置文件,它处理环境变量并为特定环境生成配置文件。在配置术语中,您有 1 个具有 20 多个实例的 Prod 环境。您将拥有一个 Prod 环境配置,并且可以使用 Web 界面相应地调整 20 多个实例。

您将特定于环境的属性移动到单独的文件中,但使用 Config,您不必这样做。使用 Config,您可以拥有 1 个配置文件,支持环境变量,以及适用于所有环境的通用配置。

请注意,我是 Config 团队的一员。

于 2018-01-18T16:29:07.490 回答