ActiveRecord::ConcurrentMigrationError: with mysql2 and rail



从 4.2 升级到 rails 5.2 后,任何迁移都会抛出:

ActiveRecord::ConcurrentMigrationError: 无法运行迁移,因为当前正在运行另一个迁移进程。

数据库适配器是 mysql2

最初,我认为这是因为我在开发环境中导入的现有生产数据库中的一些过时数据。 但是,在干净创建的数据库中也发生了同样的问题。

为了克服它(因为我真的需要在其他一些问题上取得进展(,我不得不在实际的 rails 代码中禁用咨询锁定检查。

经过数小时的尝试确定"锁定"发生的位置,甚至从头开始创建一个rails应用程序,事实证明罪魁祸首是database.yml文件中的"cast:false"行。一旦它被注释掉,我的轨道宇宙就恢复了和平,迁移又开始工作了。

发展: 适配器: MySQL2 数据库:数据库 用户名:用户 密码:密码 主机:本地主机 # 投射:假

具有讽刺意味的是,我什至不记得两年前"cast:false"最初是如何出现在代码中的。我依稀记得我把它放在那里是有目的的。尽管如此,所有测试在没有它的情况下运行良好,到目前为止,实际应用程序行为中也没有其他症状。

我希望这能帮助那些在某个时候升级到 5.2 的人。

您可以通过以下方式释放锁定:

key = ActiveRecord::Base.connection.generate_migrator_advisory_lock_key
ActiveRecord::Base.connection.release_advisory_lock(key)

最新更新