Skip to content

修复“服务端锴误“或者“”请求参数错误”的bug,无法新增和克隆问题处理 #124

Description

@brisk21

好家伙,我来救你们命啦!!!

直接原因就是任务id长度18导致相关操作有问题,就是直接去掉18的限制接口,涉及数据库结构和本地文件(修改后要重新编译)

MySQL 的 CHAR(18) 要先改!从源头做起!


✅ 完整修复流程(含数据库)

第一步:修改 Go 结构体校验规则(这个老六写死了18位)

文件crocodile/core/utils/define/define.go

// GetID get task id in post
type GetID struct {
    ID string `json:"id" form:"id" binding:"required,min=1,max=32"`
}

第二步:修改 MySQL 表字段类型(关键!)

Crocodile 默认使用 CHAR(18) 存储任务 ID,需扩展为 VARCHAR(32),当然你们可以自己设置长度,时间会越来越大的,生成的规则看了一下,我就直接来个32的,哈哈哈。

登录 MySQL(在服务器执行,账号密码演示用,实际按自己的):

docker exec -it crocodile-mysql-1 mysql -uroot -pcrocodile

执行 SQL 修改表结构:

USE crocodile;

-- 修改主任务表
ALTER TABLE crocodile task 
MODIFY COLUMN id VARCHAR(32) NOT NULL COMMENT '任务ID';

-- 修改日志表(如果有)
ALTER TABLE crocodile_log 
MODIFY COLUMN taskid VARCHAR(32) NOT NULL COMMENT '任务ID',
MODIFY COLUMN `errtaskid` VARCHAR(32) NOT NULL  DEFAULT ""  COMMENT "出错任务ID";

-- 如果有其他关联表,也需一并修改

为什么用 VARCHAR(32) 而不是 CHAR(32)

  • CHAR(18) 是定长,浪费空间且无法扩展
  • VARCHAR(32) 可变长,兼容 1~32 位 ID(包括 UUID 等未来可能格式)
    反正你自己看着办哈,我是自己修复过程!!!

第三步:本地编译新二进制

# Windows PowerShell
go env -w GOPROXY=https://goproxy.cn,direct
go mod tidy
$env:GOOS="linux"; $env:GOARCH="amd64"
go build -o crocodile-linux-amd64 .

第四步:上传二进制到服务器

# 上传后赋权
chmod +x /www/wwwroot/crocodile/crocodile-linux-amd64

第五步:修改 docker-compose.yml 启用本地构建

这里很关键,之前就是通过远程拉取作者做好的,这里就要改成自己目录,重新编译

services:
  master:
    # image: labulaka522/crocodile        # ← 注释掉
    build: .   # 替代 image: ...
    # ...
  worker:
    # image: labulaka522/crocodile:worker # ← 注释掉
    build: .   # 替代 image: ...
    # ...

第六步:重建并启动服务

docker-compose down
# 我来个强扭的瓜,很解渴
docker-compose up -d --build --force-recreate

第七步:验证端到端功能

  1. 创建一个 19 位 ID 的任务(或等待系统生成)
  2. 删除该任务
  3. 不在报服务端锴误或者请求参数错误

⚠️ 注意事项

项目 说明
备份数据库 修改前建议备份:mysqldump -uroot -pcrocodile crocodile > crocodile_backup.sql
字段索引 id 通常是主键或唯一索引,VARCHAR 不影响性能(InnoDB 对短字符串优化良好)
历史数据 CHAR(18)VARCHAR(32) 是安全的,不会丢失数据

最终一句话总结

改 Go 校验规则 + 改 MySQL 字段为 VARCHAR(32) + 本地编译 + Docker 本地构建 = 完美支持 19 位及以上任务 ID

Metadata

Metadata

Assignees

No one assigned

    Labels

    questionFurther information is requested

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions