我已阅读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框架实现这个目标?
答案 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。