flipped-aurora/gin-vue-admin · error
sys_timed_tasks表数据初始化失败!
Error message
sys_timed_tasks表数据初始化失败!
What it means
Thrown by the timed-task initializer (initTimedTask.InitializeData) when the bulk insert of the two default tasks (ClearDB @daily, CleanStaleUploads @hourly) into sys_timed_tasks fails. It wraps the raw GORM error and names the table. These seed rows drive the built-in cron jobs after startup.
Source
Thrown at server/source/system/timed_task.go:53
if !ok {
return false
}
m := db.Migrator()
return m.HasTable(&sysModel.SysTimedTask{}) && m.HasTable(&sysModel.SysTimedTaskLog{})
}
// InitializeData 吃狗粮: 原 initialize/timer.go 两条硬编码任务迁为种子, 由面板接管
func (i *initTimedTask) InitializeData(ctx context.Context) (context.Context, error) {
db, ok := ctx.Value("db").(*gorm.DB)
if !ok {
return ctx, system.ErrMissingDBContext
}
entities := []sysModel.SysTimedTask{
{Name: "ClearDB", Description: "定时清理数据库过期日志(操作记录/JWT黑名单/定时任务执行日志)", Spec: "@daily", ExecutorType: sysModel.TimedTaskExecutorMethod, MethodName: "ClearDB", Enabled: true},
{Name: "CleanStaleUploads", Description: "定时清理过期大文件上传会话", Spec: "@hourly", ExecutorType: sysModel.TimedTaskExecutorMethod, MethodName: "CleanStaleUploads", Enabled: true},
}
if err := db.Create(&entities).Error; err != nil {
return ctx, errors.Wrap(err, sysModel.SysTimedTask{}.TableName()+"表数据初始化失败!")
}
next := context.WithValue(ctx, i.InitializerName(), entities)
return next, nil
}
func (i *initTimedTask) DataInserted(ctx context.Context) bool {
db, ok := ctx.Value("db").(*gorm.DB)
if !ok {
return false
}
if errors.Is(db.Where("name = ?", "ClearDB").First(&sysModel.SysTimedTask{}).Error, gorm.ErrRecordNotFound) {
return false
}
return true
}
View on GitHub (pinned to 3136500ef3)
Solutions
- Check the wrapped cause for the exact SQL error (duplicate key vs missing table)
- Run db.AutoMigrate(&sysModel.SysTimedTask{}) before initialization
- Only seed when DataInserted(ctx) reports no tasks, or clean sys_timed_tasks first
- Verify DB connectivity/credentials and write permissions
- Confirm ExecutorType/Spec values fit the column types for your dialect
Example fix
// before: re-init duplicates ClearDB and fails
ctx, err = initTimedTask{}.InitializeData(ctx)
// after: seed only if empty
var count int64
_ = db.Model(&sysModel.SysTimedTask{}).Count(&count).Error
if count == 0 {
if err := db.AutoMigrate(&sysModel.SysTimedTask{}); err != nil { return err }
ctx, err = initTimedTask{}.InitializeData(ctx)
} Defensive patterns
Strategy: validation
Validate before calling
if !db.Migrator().HasTable(&sysModel.SysTimedTask{}) {
if err := db.AutoMigrate(&sysModel.SysTimedTask{}); err != nil { return err }
}
var count int64
if err := db.Model(&sysModel.SysTimedTask{}).Count(&count).Error; err != nil { return err }
if count > 0 { return nil } // tasks already seeded Type guard
func hasDB(ctx context.Context) (*gorm.DB, bool) {
db, ok := ctx.Value("db").(*gorm.DB)
return db, ok && db != nil
} Try / catch
ctx, err = initTimedTask{}.InitializeData(ctx)
if err != nil {
log.Printf("timed task seed failed: %v (cause: %v)", err, errors.Cause(err))
return err
} Prevention
- Guard with DataInserted so ClearDB/CleanStaleUploads are never duplicated
- AutoMigrate the tasks table before init
- Keep Spec/ExecutorType values compatible with your dialect's column types
- Run init once per database; avoid concurrent init processes
When it happens
Trigger: db.Create(&entities) returns an error: sys_timed_tasks not migrated, duplicate task Name/MethodName from prior seeding, enum/type mismatch on ExecutorType or Spec column, or DB connection failure during insert.
Common situations: Initialization re-run on an already-seeded DB (duplicate ClearDB row); schema change between versions where the tasks table gained constraints; DB user lacks INSERT privilege; sqlite test DB locked concurrently.
Related errors
- media.FileUploadAndDownload表数据初始化失败!
- sys_apis表数据初始化失败!
- sys_ignore_apis表数据初始化失败!
- %s表数据初始化失败!
- sys_positions表数据初始化失败!
AI-assisted analysis of flipped-aurora/gin-vue-admin@3136500ef3 (2026-08-31).
Data as JSON: /api/errors/5f0148939f05e62b.
Report an issue: GitHub.