fix: preserve runtime DB config for reposync subprocess
This commit is contained in:
@@ -149,6 +149,20 @@ const (
|
|||||||
// TablePrefix 表前缀,从配置文件读取
|
// TablePrefix 表前缀,从配置文件读取
|
||||||
var TablePrefix string
|
var TablePrefix string
|
||||||
|
|
||||||
|
// Runtime 数据库配置快照,用于需要单独启动内部子进程(如 reposync)时显式透传数据库连接信息,
|
||||||
|
// 避免主进程启动阶段清理环境变量后,子进程意外回退到默认 sqlite 配置。
|
||||||
|
var (
|
||||||
|
RuntimeDBType string
|
||||||
|
RuntimeDBHost string
|
||||||
|
RuntimeDBPort int
|
||||||
|
RuntimeDBUser string
|
||||||
|
RuntimeDBPassword string
|
||||||
|
RuntimeDBName string
|
||||||
|
RuntimeDBPath string
|
||||||
|
RuntimeDBDSN string
|
||||||
|
RuntimeDBTablePrefix string
|
||||||
|
)
|
||||||
|
|
||||||
// Secret JWT和密码salt密钥,运行中自动从数据库加载
|
// Secret JWT和密码salt密钥,运行中自动从数据库加载
|
||||||
var Secret string
|
var Secret string
|
||||||
|
|
||||||
|
|||||||
@@ -125,6 +125,15 @@ func LoadConfig(path string) (*AppConfig, error) {
|
|||||||
|
|
||||||
// 设置表前缀到 constant 包
|
// 设置表前缀到 constant 包
|
||||||
constant.TablePrefix = Config.Database.TablePrefix
|
constant.TablePrefix = Config.Database.TablePrefix
|
||||||
|
constant.RuntimeDBType = Config.Database.Type
|
||||||
|
constant.RuntimeDBHost = Config.Database.Host
|
||||||
|
constant.RuntimeDBPort = Config.Database.Port
|
||||||
|
constant.RuntimeDBUser = Config.Database.User
|
||||||
|
constant.RuntimeDBPassword = Config.Database.Password
|
||||||
|
constant.RuntimeDBName = Config.Database.DBName
|
||||||
|
constant.RuntimeDBPath = Config.Database.Path
|
||||||
|
constant.RuntimeDBDSN = Config.Database.DSN
|
||||||
|
constant.RuntimeDBTablePrefix = Config.Database.TablePrefix
|
||||||
|
|
||||||
// 暂存旧的 Secret,不再直接给 constant 赋值(改为到 settings 初始化时判断)
|
// 暂存旧的 Secret,不再直接给 constant 赋值(改为到 settings 初始化时判断)
|
||||||
// constant.Secret = Config.Security.Secret
|
// constant.Secret = Config.Security.Secret
|
||||||
|
|||||||
@@ -243,8 +243,6 @@ func (h *ServerSchedulerHandler) OnTaskCompleted(req *executor.ExecutionRequest,
|
|||||||
// 处理任务完成(更新统计、清理旧日志等)
|
// 处理任务完成(更新统计、清理旧日志等)
|
||||||
h.es.taskLogService.ProcessTaskCompletion(taskLog)
|
h.es.taskLogService.ProcessTaskCompletion(taskLog)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 更新内存缓冲
|
// 更新内存缓冲
|
||||||
h.es.UpdateResult(*result)
|
h.es.UpdateResult(*result)
|
||||||
|
|
||||||
@@ -1083,7 +1081,35 @@ func buildRepoCommandEnvPrefix() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
absScriptsDir := resolveAbsScriptsDir()
|
absScriptsDir := resolveAbsScriptsDir()
|
||||||
return "BH_CONFIG_PATH='" + strings.ReplaceAll(absConfig, "'", "'\\''") + "' BH_SCRIPTS_DIR='" + strings.ReplaceAll(absScriptsDir, "'", "'\\''") + "' "
|
parts := []string{
|
||||||
|
shellEnvAssignment("BH_CONFIG_PATH", absConfig),
|
||||||
|
shellEnvAssignment("BH_SCRIPTS_DIR", absScriptsDir),
|
||||||
|
}
|
||||||
|
|
||||||
|
appendIfSet := func(key string, value string) {
|
||||||
|
if strings.TrimSpace(value) == "" {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
parts = append(parts, shellEnvAssignment(key, value))
|
||||||
|
}
|
||||||
|
|
||||||
|
appendIfSet("BH_DB_TYPE", constant.RuntimeDBType)
|
||||||
|
appendIfSet("BH_DB_HOST", constant.RuntimeDBHost)
|
||||||
|
if constant.RuntimeDBPort > 0 {
|
||||||
|
parts = append(parts, shellEnvAssignment("BH_DB_PORT", fmt.Sprintf("%d", constant.RuntimeDBPort)))
|
||||||
|
}
|
||||||
|
appendIfSet("BH_DB_USER", constant.RuntimeDBUser)
|
||||||
|
appendIfSet("BH_DB_PASSWORD", constant.RuntimeDBPassword)
|
||||||
|
appendIfSet("BH_DB_NAME", constant.RuntimeDBName)
|
||||||
|
appendIfSet("BH_DB_PATH", constant.RuntimeDBPath)
|
||||||
|
appendIfSet("BH_DB_DSN", constant.RuntimeDBDSN)
|
||||||
|
appendIfSet("BH_DB_TABLE_PREFIX", constant.RuntimeDBTablePrefix)
|
||||||
|
|
||||||
|
return strings.Join(parts, " ") + " "
|
||||||
|
}
|
||||||
|
|
||||||
|
func shellEnvAssignment(key, value string) string {
|
||||||
|
return key + "='" + strings.ReplaceAll(value, "'", "'\\''") + "'"
|
||||||
}
|
}
|
||||||
|
|
||||||
func resolveAbsScriptsDir() string {
|
func resolveAbsScriptsDir() string {
|
||||||
|
|||||||
Reference in New Issue
Block a user