修复迁移时,数据库未指定的情况下数据库脚本混乱的问题
This commit is contained in:
@@ -34,14 +34,14 @@ func RunMigrationsFromConfig(configFile, migrationsDir string) error {
|
||||
// RunMigrationsFromConfigWithCommand 从配置文件运行迁移(支持命令,黑盒模式)
|
||||
//
|
||||
// 这是最简单的迁移方式,内部自动处理:
|
||||
// - 配置加载(支持文件、环境变量、默认路径)
|
||||
// - 配置加载(支持配置文件、默认路径)
|
||||
// - 数据库连接(自动识别数据库类型)
|
||||
// - 迁移文件加载和执行
|
||||
//
|
||||
// 参数:
|
||||
// - configFile: 配置文件路径,支持:
|
||||
// - 空字符串:自动查找(config.json, ../config.json)
|
||||
// - 环境变量 DATABASE_URL:直接使用数据库URL
|
||||
// - 相对路径或绝对路径:指定配置文件路径
|
||||
// - migrationsDir: 迁移文件目录,支持:
|
||||
// - 空字符串:使用默认目录 "migrations"
|
||||
// - 相对路径或绝对路径
|
||||
@@ -57,9 +57,6 @@ func RunMigrationsFromConfig(configFile, migrationsDir string) error {
|
||||
//
|
||||
// // 指定配置和迁移目录
|
||||
// migration.RunMigrationsFromConfigWithCommand("config.json", "scripts/sql", "up")
|
||||
//
|
||||
// // 使用环境变量
|
||||
// // DATABASE_URL="mysql://..." migration.RunMigrationsFromConfigWithCommand("", "migrations", "up")
|
||||
func RunMigrationsFromConfigWithCommand(configFile, migrationsDir, command string) error {
|
||||
// 加载配置
|
||||
cfg, err := loadConfigFromFileOrEnv(configFile)
|
||||
@@ -78,8 +75,8 @@ func RunMigrationsFromConfigWithCommand(configFile, migrationsDir, command strin
|
||||
migrationsDir = "migrations"
|
||||
}
|
||||
|
||||
// 创建迁移器
|
||||
migrator := NewMigrator(db)
|
||||
// 创建迁移器(传入数据库类型,性能更好)
|
||||
migrator := NewMigratorWithType(db, cfg.Database.Type)
|
||||
|
||||
// 加载迁移文件
|
||||
migrations, err := LoadMigrationsFromFiles(migrationsDir, "*.sql")
|
||||
@@ -122,22 +119,16 @@ func RunMigrationsFromConfigWithCommand(configFile, migrationsDir, command strin
|
||||
return nil
|
||||
}
|
||||
|
||||
// loadConfigFromFileOrEnv 从文件或环境变量加载配置
|
||||
// loadConfigFromFileOrEnv 从配置文件加载配置
|
||||
// 支持指定配置文件路径,或自动查找默认路径
|
||||
func loadConfigFromFileOrEnv(configFile string) (*config.Config, error) {
|
||||
// 优先从环境变量加载
|
||||
if dbURL := os.Getenv("DATABASE_URL"); dbURL != "" {
|
||||
return &config.Config{
|
||||
Database: &config.DatabaseConfig{
|
||||
DSN: dbURL,
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
|
||||
// 尝试从配置文件加载
|
||||
// 如果指定了配置文件路径,优先使用
|
||||
if configFile != "" {
|
||||
if _, err := os.Stat(configFile); err == nil {
|
||||
return config.LoadFromFile(configFile)
|
||||
}
|
||||
// 如果指定的文件不存在,返回错误
|
||||
return nil, fmt.Errorf("配置文件不存在: %s", configFile)
|
||||
}
|
||||
|
||||
// 尝试默认路径
|
||||
@@ -148,7 +139,7 @@ func loadConfigFromFileOrEnv(configFile string) (*config.Config, error) {
|
||||
}
|
||||
}
|
||||
|
||||
return nil, fmt.Errorf("未找到配置文件,也未设置环境变量 DATABASE_URL")
|
||||
return nil, fmt.Errorf("未找到配置文件,请指定配置文件路径或确保存在以下文件之一: %v", defaultPaths)
|
||||
}
|
||||
|
||||
// connectDB 连接数据库
|
||||
|
||||
Reference in New Issue
Block a user