flipped-aurora/gin-vue-admin · error

同步失败!

Error message

同步失败!

What it means

During reconciliation, All inserts any directories discovered on disk that have no DB record (createEntity). This error wraps a failed batch INSERT of those new package rows, so the filesystem-to-database sync aborts.

Source

Thrown at server/service/system/auto_code_package.go:234

	for i := 0; i < len(server); i++ {
		if _, ok := entitiesMap[server[i].PackageName]; !ok {
			if server[i].Template == "package" {
				createEntity = append(createEntity, server[i])
			}
		}
	}
	for i := 0; i < len(plugin); i++ {
		if _, ok := entitiesMap[plugin[i].PackageName]; !ok {
			if plugin[i].Template == "plugin" {
				createEntity = append(createEntity, plugin[i])
			}
		}
	}

	if len(createEntity) > 0 {
		err = global.GVA_DB.WithContext(ctx).Create(&createEntity).Error
		if err != nil {
			return nil, errors.Wrap(err, "同步失败!")
		}
		entities = append(entities, createEntity...)
	}

	// 处理数据库存在但实体文件不存在的情况 - 删除数据库中对应的数据
	existingPackageNames := make(map[string]bool)
	// 收集所有存在的包名
	for i := 0; i < len(server); i++ {
		existingPackageNames[server[i].PackageName] = true
	}
	for i := 0; i < len(plugin); i++ {
		existingPackageNames[plugin[i].PackageName] = true
	}

	// 找出需要删除的数据库记录
	deleteEntityIDs := []uint{}
	for i := 0; i < len(entities); i++ {
		if !existingPackageNames[entities[i].PackageName] {

View on GitHub (pinned to 3136500ef3)

Solutions

  1. Check the wrapped inner error for duplicate-key or connection issues
  2. Handle unique conflicts gracefully (upsert via clause.OnConflict or check existence before insert) to avoid races
  3. Ensure sys_auto_code_packages is migrated
  4. Trim package directory names to fit the column size

Example fix

// before: plain create, duplicate rows race-safe only by luck
err = global.GVA_DB.WithContext(ctx).Create(&createEntity).Error
// after: tolerate concurrent sync inserts
err = global.GVA_DB.WithContext(ctx).
    Clauses(clause.OnConflict{DoNothing: true}).
    Create(&createEntity).Error
Defensive patterns

Strategy: retry

Validate before calling

names := make([]string, 0, len(createEntity))
for _, e := range createEntity {
    names = append(names, e.PackageName)
}
var existing int64
if err := global.GVA_DB.WithContext(ctx).
    Model(&model.SysAutoCodePackage{}).
    Where("package_name IN ?", names).Count(&existing).Error; err != nil {
    return fmt.Errorf("pre-check failed: %w", err)
}

Try / catch

err = global.GVA_DB.WithContext(ctx).
    Clauses(clause.OnConflict{DoNothing: true}).
    Create(&createEntity).Error
if err != nil {
    var mysqlErr *mysql.MySQLError
    if errors.As(err, &mysqlErr) && (mysqlErr.Number == 1213 || mysqlErr.Number == 1205) {
        time.Sleep(time.Second)
        err = global.GVA_DB.WithContext(ctx).Create(&createEntity).Error
    }
    if err != nil {
        return nil, errors.Wrap(err, "同步失败!")
    }
}

Prevention

When it happens

Trigger: Calling autoCodePackage.All when new package directories exist on disk and the batch Create fails — DB connection dropped, table missing, duplicate package_name violating a unique index, or field value exceeding column size.

Common situations: Unique constraint on package_name violated by a race (another request synced the same dir concurrently); missing migration in fresh env; DB outage during scan-and-sync; oversized template/package name beyond column length.

Related errors


AI-assisted analysis of flipped-aurora/gin-vue-admin@3136500ef3 (2026-08-31). Data as JSON: /api/errors/dc6b59db8e9cdb7c. Report an issue: GitHub.