ActiveRecord :: ConcurrentMigrationError:使用mysql2和rails 5.2

时间:2018-05-06 10:18:11

标签: ruby-on-rails mysql2 ruby-on-rails-5.2

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

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

数据库适配器是mysql2

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

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

2 个答案:

答案 0 :(得分:1)

经过几个小时的努力来确定"锁定"发生,甚至从头开始创建一个rails应用程序,事实证明,罪魁祸首是"演员:假" database.yml文件中的行。一旦被评论出来,我的铁轨世界就恢复了和平,移民再次开始运作。

发展:   适配器:mysql2   数据库:db   用户名:user   密码:passwd   主持人:localhost   #cast:false

具有讽刺意味的是,我甚至无法回想起那个" cast:false"两年前首先在代码中结束了。我隐约记得我把它放在那里有目的。尽管如此,所有测试在没有它的情况下运行良好,并且到目前为止在实际的app行为中也没有其他症状。

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

答案 1 :(得分:0)

您可以通过这种方式解除锁定:

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