如何跳过RoundHouse.ScriptsRun表中已存在记录的一次性脚本?
解决RoundHouse一次性脚本执行报错的方案
针对你遇到的one time script has changed since last run错误,结合你的场景(数据库已同步最新结构,需跳过ScriptsRun表中已记录的一次性脚本),可以用以下几种方法解决:
方法1:使用RoundHouse内置参数跳过变更检查
执行升级脚本时添加--ignoreOneTimeScriptChanges=true参数,这个参数会让RoundHouse忽略一次性脚本的变更差异,既不会抛出错误,也不会重新执行已在ScriptsRun表中有记录的脚本。
注意:不要使用--warnOnOneTimeScriptChanges=true,这个参数仅会发出警告,但仍会重新执行脚本,这就是你之前出现数据库结构不一致的原因。
方法2:同步脚本哈希值到ScriptsRun表
如果需要保持ScriptsRun表的哈希一致性,避免后续部署再触发错误,可以:
- 用RoundHouse的哈希生成命令计算当前代码库中一次性脚本的哈希值:
rh hash --scriptPath="你的一次性脚本目录路径" - 更新数据库中
RoundHouse.ScriptsRun表对应脚本的Hash字段,使其与生成的哈希值一致。这样RoundHouse会判定脚本未发生变更,直接跳过执行。
方法3:修改ScriptsRun表的脚本状态
针对个别需要跳过的脚本,可以手动更新RoundHouse.ScriptsRun表:
- 将目标脚本的
Status字段设置为Success - 确保
RunDate和Hash字段值准确匹配脚本执行的历史记录
这样RoundHouse会认为该脚本已成功执行,不会再进行检查或执行。
内容的提问来源于stack exchange,提问作者Chinmay Karanjkar
相关产品推荐
相关产品推荐

