app.conf&旁边的外部配置revel go framework的环境变量

时间:2015-08-21 20:38:23

标签: go revel

我已阅读revel app.conf manual以了解自定义配置和环境变量。但是我无法使用额外的外部配置和app.conf。

我的目标是除内部app.conf外还实现外部配置文件。让我们说创建一个名为 example 的产品,示例产品使用app.conf维护它的合理默认值(不向最终用户公开),而产品通过example.conf公开配置属性(产品用户的默认位置可以是/etc/example/example.conf。

例如:来自app.conf的http配置字段

http.addr =
http.port = 9000

将其扩展到example.conf

http.addr =
http.port = 9000

[database]
host = "localhost"
port = 8080
user = "username"
password = "password"
# etc...

然后我在应用程序启动时读取example.conf使用值也在app.conf之上应用值(覆盖)。最后revel服务器启动了!

如何用revel go框架实现这个目标?

2 个答案:

答案 0 :(得分:1)

看来你正在反对app.conf的设计。它已经设置为分段,例如所有这些都在一个app.conf文件中

[dev]
results.pretty = true
watch = true
http.addr = 192.168.1.2

[test]
results.pretty = true
watch = true
http.addr = 192.168.1.22

[prod]
results.pretty = false
watch = false
http.addr = 192.168.1.100

您可以使用三种不同的命令行选项启动3种不同的方案

revel run bitbucket.org/mycorp/my-app dev

revel run bitbucket.org/mycorp/my-app test

revel run bitbucket.org/mycorp/my-app prod

我知道这不是你的目标,但你可以获得类似的结果。

答案 1 :(得分:1)

在第152行的github.com/revel/revel/revel.go中,您有类似

的内容

Config, err = LoadConfig("app.conf")

也许您可以尝试使用此

进行修改
if len(os.Getenv("SOME ENV VAR")) > 0 {
    Config, err = LoadConfig("path/to/your/example.conf")
} else {
    Config, err = LoadConfig("app.conf")
}

您只需在prod服务器上设置env var。

这样你就不会使用app.conf而是使用example.conf。