1

我已经阅读了自定义配置和环境变量的 revel app.conf 手册。但是我找不到与 app.conf 一起使用附加外部配置的方法。

我的目标是实现除了内部 app.conf 之外的外部配置文件。假设创建一个名为example的产品,example product 使用 app.conf 维护它的合理默认值(不向最终用户公开),而不是 product 通过 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 go 框架来实现这个目标?

4

2 回答 2

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

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

于 2015-08-21T21:11:53.490 回答
1

在 github.com/revel/revel/revel.go 第 152 行附近,您有类似

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")
}

您只需要在产品服务器上设置 env var。

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

于 2015-08-22T11:13:27.770 回答