2

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

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

数据库适配器是mysql2

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

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

4

2 回答 2

2

经过数小时试图确定“锁定”发生的位置,甚至从头开始创建一个 Rails 应用程序后,事实证明,罪魁祸首是 database.yml 文件中的“cast: false”行。一旦将其注释掉,我的 Rails 世界就恢复了和平,并且迁移再次开始工作。

开发:适配器:mysql2 数据库:db 用户名:用户密码:passwd 主机:localhost #cast:false

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

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

于 2018-05-06T10:18:11.407 回答
0

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

key = ActiveRecord::Base.connection.generate_migrator_advisory_lock_key
ActiveRecord::Base.connection.release_advisory_lock(key)
于 2021-04-20T13:20:55.137 回答