fix: 提供 SQLite 迁移故障恢复开关
This commit is contained in:
1 parent
99b5d94dc2
commit
f22e575124
3 files changed
+28
-15
No files matched your search
+18
-15
@@ -12,20 +12,20 @@ import (
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"ezops/controller"
|
||||
"ezops/router"
|
||||
"ezops/config"
|
||||
"ezops/controller"
|
||||
"ezops/model"
|
||||
"ezops/seed"
|
||||
"ezops/pkg/appdir"
|
||||
"ezops/pkg/auditcleaner"
|
||||
"ezops/pkg/billingsync"
|
||||
"ezops/pkg/database"
|
||||
snmppkg "ezops/pkg/snmp"
|
||||
"ezops/pkg/cronscheduler"
|
||||
"ezops/pkg/systask"
|
||||
"ezops/pkg/database"
|
||||
"ezops/pkg/logger"
|
||||
ezredis "ezops/pkg/redis"
|
||||
snmppkg "ezops/pkg/snmp"
|
||||
"ezops/pkg/systask"
|
||||
"ezops/router"
|
||||
"ezops/seed"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/spf13/viper"
|
||||
@@ -41,10 +41,11 @@ var (
|
||||
|
||||
// CLI 参数定义 // Logan.Li
|
||||
var (
|
||||
flagPort = flag.String("port", "", "服务端口 (默认: 8080)")
|
||||
flagConfig = flag.String("config", "", "配置文件路径 (默认: config.yaml)")
|
||||
flagMode = flag.String("mode", "", "运行模式: local (SQLite+redka), development, production, release")
|
||||
flagLogLevel = flag.String("log-level", "", "日志级别: debug, info, warn, error")
|
||||
flagPort = flag.String("port", "", "服务端口 (默认: 8080)")
|
||||
flagConfig = flag.String("config", "", "配置文件路径 (默认: config.yaml)")
|
||||
flagMode = flag.String("mode", "", "运行模式: local (SQLite+redka), development, production, release")
|
||||
flagLogLevel = flag.String("log-level", "", "日志级别: debug, info, warn, error")
|
||||
flagSkipAutoMigrate = flag.Bool("skip-auto-migrate", false, "跳过启动时的数据库自动迁移(仅用于已完成迁移的故障恢复)")
|
||||
|
||||
// 数据库参数
|
||||
flagDBDriver = flag.String("db-driver", "", "数据库驱动: sqlite, mysql, postgres (默认: sqlite)")
|
||||
@@ -63,8 +64,8 @@ var (
|
||||
flagRedisDriver = flag.String("redis-driver", "", "Redis 驱动: redis (外部Redis), redka (内嵌,需CGO)")
|
||||
|
||||
// JWT 参数
|
||||
flagJWTSecret = flag.String("jwt-secret", "", "JWT 密钥")
|
||||
flagJWTExpire = flag.Int("jwt-expire", 0, "JWT 过期时间 (小时)")
|
||||
flagJWTSecret = flag.String("jwt-secret", "", "JWT 密钥")
|
||||
flagJWTExpire = flag.Int("jwt-expire", 0, "JWT 过期时间 (小时)")
|
||||
|
||||
// 显示版本
|
||||
flagVersion = flag.Bool("version", false, "显示版本信息")
|
||||
@@ -144,8 +145,10 @@ func main() {
|
||||
log.Fatal("数据库连接失败", zap.Error(err))
|
||||
}
|
||||
|
||||
// 自动迁移
|
||||
if err := database.AutoMigrate(db); err != nil {
|
||||
// 自动迁移;大 SQLite 库异常迁移时可显式跳过,先恢复已存在的服务。 // Logan.Li
|
||||
if *flagSkipAutoMigrate {
|
||||
log.Warn("已跳过数据库自动迁移,仅限已完成迁移的故障恢复场景")
|
||||
} else if err := database.AutoMigrate(db); err != nil {
|
||||
log.Fatal("数据库迁移失败", zap.Error(err))
|
||||
}
|
||||
|
||||
@@ -409,7 +412,7 @@ func loadConfig() *config.Config {
|
||||
viper.SetDefault("redis.password", "")
|
||||
viper.SetDefault("redis.db", 0)
|
||||
|
||||
viper.SetDefault("jwt.secret", "") // 生产环境必须通过配置或 JWT_SECRET 环境变量设置
|
||||
viper.SetDefault("jwt.secret", "") // 生产环境必须通过配置或 JWT_SECRET 环境变量设置
|
||||
viper.SetDefault("jwt.expire_hour", 24)
|
||||
|
||||
viper.SetDefault("websocket.read_buffer_size", 1024)
|
||||
|
||||
Reference in new issue
Block a user