36 lines
1.2 KiB
Go
36 lines
1.2 KiB
Go
package common
|
||
|
||
import (
|
||
"os"
|
||
|
||
"github.com/gogf/gf/v2/os/gcfg"
|
||
|
||
"github.com/gogf/gf/v2/frame/g"
|
||
)
|
||
|
||
// init 数据库配置的环境变量覆盖(同一份 config.yml 线上线下通用,不用改文件切环境):
|
||
// Docker 部署由 docker-compose 注入 DB_HOST/DB_NAME 指向容器网络内的 postgres;
|
||
// 本地开发不注入,走 config.yml 默认值(127.0.0.1/animal_spot)。
|
||
// Set 是纯内存覆盖(不落盘),且必须发生在任何 g.DB() 调用(含 dao 包 init 建表)之前——
|
||
// common 包先于依赖它的 dao 包初始化,天然满足时序。
|
||
func init() {
|
||
overrides := [][2]string{
|
||
{"DB_HOST", "database.default.host"},
|
||
{"DB_NAME", "database.default.name"},
|
||
{"DB_PORT", "database.default.port"},
|
||
{"DB_USER", "database.default.user"},
|
||
{"DB_PASS", "database.default.pass"},
|
||
}
|
||
adapter, ok := g.Cfg().GetAdapter().(*gcfg.AdapterFile)
|
||
if !ok {
|
||
panic("数据库环境变量覆盖失败:默认配置适配器不是文件适配器")
|
||
}
|
||
for _, kv := range overrides {
|
||
if v := os.Getenv(kv[0]); v != "" {
|
||
if err := adapter.Set(kv[1], v); err != nil {
|
||
panic("环境变量覆盖配置失败 " + kv[0] + ": " + err.Error())
|
||
}
|
||
}
|
||
}
|
||
}
|