通过环境协调配置更改的好方法是什么?
为了将我们的代码与环境分离,我们将所有环境配置移动到外部文件。因此,应用程序可能会查找${application.config.dir}/app.properties
,而app.properties
可能包含:
user.auth.endpoint=http://some.url/user
user.auth.apikey=abcd12314
问题是,user.auth.endpoint
需要在测试时指向测试资源,在暂存环境时指向暂存资源,在生产时指向生产资源。
我们可以维护配置文件的不同副本,但这会违反DRY并变得非常笨重(有20多个生产环境)。
管理此内容的好方法是什么?我应该搜索哪些工具?
答案 0 :(得分:1)
外部化配置是一个好主意,您可以将它们外部化到环境变量。
在不更改任何代码的情况下,可以在部署之间轻松更改Env变量; 与配置文件不同,它们被检入的可能性很小 代码回购意外;与自定义配置文件或其他不同 配置机制,如Java系统属性,它们是一种语言 - 和操作系统无关的标准。
答案 1 :(得分:1)
我知道有三种方法。
第一种方法是编写一个Python"包装器"适合您应用的脚本。该脚本将找出一些环境细节,例如主机名,用户名和环境变量的值,然后构造传递给实际应用程序的相应配置文件(或一组命令行选项)。
第二种方法是将脚本语言(Python,Lua和Tcl)的解释器嵌入到您的应用程序中。这使您可以使用该嵌入式脚本语言的语法编写配置文件。通过这种方式,配置文件可以利用脚本语言的功能,例如查询环境变量或执行shell命令(例如hostname
)并使用if-then-else语句的功能适当地设置变量。
第三种方法(如果您使用的是C ++或Java)是使用开源Config4*库(免责声明,我是其中的主要开发人员)。我建议你阅读" Config4 *入门"的第2章。手动查看其灵活语法如何使单个配置文件适应多种环境的示例。
答案 2 :(得分:1)
您可以查看http://www.configapp.com。您使用1个配置文件,并在环境之间切换/选项卡。在内部,它只是一个配置文件,它处理环境变量并生成特定环境的配置文件。在Config术语中,您有1个Prod环境,其中包含20多个实例。您将拥有Prod环境配置,您可以使用Web界面相应地调整20多个实例。
您将特定于环境的属性移动到单独的文件中,但使用Config时,您不必这样做。使用Config,您可以拥有1个配置文件,其中包含环境变量支持,以及适用于所有环境的通用配置。
请注意,我是Config团队的成员。