From 7d401326bcbe380c06b457490d8e915c450b4bae Mon Sep 17 00:00:00 2001 From: Admin Date: Thu, 16 Jul 2026 18:25:02 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=9B=B4=E6=8E=A5=E5=86=99=E5=85=A5?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6=E8=A7=A3=E5=86=B3=20viper?= =?UTF-8?q?=20=E8=B7=AF=E5=BE=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/config/config.go | 53 +++++++++++++++++++++++++++------------ 1 file changed, 37 insertions(+), 16 deletions(-) diff --git a/internal/config/config.go b/internal/config/config.go index debdc56..d8723e8 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -102,26 +102,47 @@ func Save(cfg *Config) error { return fmt.Errorf("创建数据目录失败: %w", err) } - viper.Set("server", cfg.Server) - viper.Set("database", cfg.Database) - viper.Set("redis", cfg.Redis) - viper.Set("jwt", cfg.JWT) - viper.Set("captcha", cfg.Captcha) - - // 使用 SafeWriteConfig,如果文件不存在会自动创建 + // 直接写入配置文件,避免 viper 的路径问题 configPath := "./data/config.yaml" - viper.SetConfigFile(configPath) - // 检查文件是否存在,不存在则创建 - if _, err := os.Stat(configPath); os.IsNotExist(err) { - if err := viper.SafeWriteConfig(); err != nil { - return fmt.Errorf("创建配置文件失败: %w", err) - } - return nil + // 构建 YAML 内容 + content := fmt.Sprintf(`server: + host: %s + port: %d + mode: %s +database: + type: %s + host: %s + port: %d + user: %s + password: %s + database: %s + sqlite: + path: %s +redis: + enabled: %v + host: %s + port: %d + password: %s + db: %d +jwt: + secret: %s + expire_time: %d +captcha: + model_path: %s +`, + cfg.Server.Host, cfg.Server.Port, cfg.Server.Mode, + cfg.Database.Type, cfg.Database.Host, cfg.Database.Port, cfg.Database.User, cfg.Database.Password, cfg.Database.Database, cfg.Database.SQLite.Path, + cfg.Redis.Enabled, cfg.Redis.Host, cfg.Redis.Port, cfg.Redis.Password, cfg.Redis.DB, + cfg.JWT.Secret, cfg.JWT.ExpireTime, + cfg.Captcha.ModelPath, + ) + + if err := os.WriteFile(configPath, []byte(content), 0644); err != nil { + return fmt.Errorf("写入配置文件失败: %w", err) } - // 文件已存在,直接写入 - return viper.WriteConfig() + return nil } func IsInstalled() bool {