如何标记Evolve数据库迁移完成?SkipNextMigrations选项报错
解决Evolve无法识别
--skip-next-migrations选项的问题 可能的原因与解决办法
1. 检查Evolve版本兼容性
SkipNextMigrations选项并非所有Evolve版本都支持,先确认你的Evolve版本:
./evolve --version
如果版本较旧,建议升级到最新稳定版;若因依赖限制无法升级,查看对应版本的官方文档,确认该功能的参数名称(部分旧版本可能使用--skip或其他参数名)。
2. 修正命令行参数格式
部分版本中,--skip-next-migrations需要指定跳过的迁移数量而非布尔值true,比如跳过1个迁移脚本的正确命令:
./evolve migrate mysql -c "$CONNECTION_STRING" -l ../migrations --command-timeout 36000 --skip-next-migrations 1
同时注意参数的大小写:部分CLI实现严格区分短横线分隔(--skip-next-migrations)和驼峰式(--SkipNextMigrations),优先使用官方文档对应版本的参数格式。
3. 替代方案:手动标记迁移为已完成
如果命令行选项始终无法生效,可直接操作Evolve的元数据记录表(默认表名为changelog):
- 计算目标迁移脚本的校验值:
./evolve checksum mysql -c "$CONNECTION_STRING" -l ../migrations - 在
changelog表中插入一条记录,将目标脚本标记为已应用:
字段需包含:id:唯一标识(可自增)version:迁移脚本的版本号(如1对应V1__xxx.sql)description:脚本描述(与文件名中__后的内容一致)script_name:迁移脚本的完整文件名checksum:上述命令计算得到的校验值status:设为Appliedapplied_on:当前时间applied_by:执行用户
这样Evolve会认为该迁移已完成,不会再执行对应的脚本。
内容的提问来源于stack exchange,提问作者Josh Withee
相关产品推荐
相关产品推荐

