Go Viper中使用环境变量重写配置的问题
我们使用Viper来读取和解析配置文件,所有这些都可以正常工作 但是,我们无法使用env变量覆盖一些配置值。这些是将配置绑定到结构或结构数组的特定用例 下面是config.yaml中的一个示例:Go Viper中使用环境变量重写配置的问题,go,viper,viper-go,Go,Viper,Viper Go,我们使用Viper来读取和解析配置文件,所有这些都可以正常工作 但是,我们无法使用env变量覆盖一些配置值。这些是将配置绑定到结构或结构数组的特定用例 下面是config.yaml中的一个示例: app: verifiers: - name: "test1" url: "http://test1.url" cache: "5000ms" - name: "test2" url: "http://test2.url"
app:
verifiers:
- name: "test1"
url: "http://test1.url"
cache: "5000ms"
- name: "test2"
url: "http://test2.url"
cache: "10000ms"
它绑定到以下结构(golang):
我们无法使用env变量覆盖验证器的值
以下是我们使用的Viper选项:
viper.AutomaticEnv()
viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_"))
有没有人遇到过类似的问题,或者可以确认Viper不支持这样的用例
任何指点都将不胜感激
谢谢我之前就是这样用的
app:
debug: ${DEBUG}
然后像这样运行:
DEBUG=true ./hobbyproject
这就是我之前使用它的方式
app:
debug: ${DEBUG}
然后像这样运行:
DEBUG=true ./hobbyproject
viper无法读取配置文件中的环境变量。您必须在使用值的.go文件中替换它们。以下是我如何实现以下目标的示例:
要求Viver用“Env”前缀来考虑系统环境变量,即ViPER将“Envi-Mango用户”和“EnvimMangGuo口令”作为系统环境变量
。viper.AutomaticEnv()
viper.SetEnvPrefix(viper.GetString("ENV"))
viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_"))
在yml文件中:
mongodb:
url: "mongodb+srv://${username}:${password}@xxxxxxx.mongodb.net/"
database: "test"
在mongodb连接文件中:(在建立db连接之前,用相应的环境变量替换${username}和${password},但是viper将读取那些没有前缀的变量)
viper无法读取配置文件中的环境变量。您必须在使用值的.go文件中替换它们。以下是我如何实现以下目标的示例:
要求Viver用“Env”前缀来考虑系统环境变量,即ViPER将“Envi-Mango用户”和“EnvimMangGuo口令”作为系统环境变量
。viper.AutomaticEnv()
viper.SetEnvPrefix(viper.GetString("ENV"))
viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_"))
在yml文件中:
mongodb:
url: "mongodb+srv://${username}:${password}@xxxxxxx.mongodb.net/"
database: "test"
在mongodb连接文件中:(在建立db连接之前,用相应的环境变量替换${username}和${password},但是viper将读取那些没有前缀的变量)
我试图实现您的解决方案,但在解析uri时遇到了一个
错误:scheme必须是“mongodb”或“mongodb+srv”
。你知道问题出在哪里吗?我试图实现你的解决方案,但我在解析uri时遇到了一个错误:scheme必须是“mongodb”或“mongodb+srv”
。你知道问题出在哪里吗?