问题描述

本周将数据由PSQL迁移到了MySQL,在迁移顺利进行之后,于周三进行了一个小规模的BUG修复,为修复数据表中的错误,增加了 4 个migration文件,运行如下指令:

1
RAILS_ENV=production rails db:migrate

得到如下报错:

1
2
ActiveRecord::ConcurrentMigrationError:
Failed to release advisory lock

解决方案

Rails 6 文档中提到了如下内容

Advisory Locks are enabled by default on MySQL and are used to make database migrations concurrent safe. You can disable advisory locks by setting advisory_locks to false:
Configuring Rails Applications

该特性在Rails 6开始支持,对于不太方便升级Rails的朋友,实际上上述的异常并不会影响迁移的执行(如果影响到我想应该不是该问题导致的),一个我并不太推荐的方法是使用Rails 6的工程来跑特定的迁移。