【问题标题】:ActiveRecord::ConcurrentMigrationError: with mysql2 and rails 5.2ActiveRecord::ConcurrentMigrationError:使用 mysql2 和 rails 5.2
【发布时间】:2018-05-06 10:18:11
【问题描述】:
从 4.2 升级到 rails 5.2 后,任何迁移都会抛出:
ActiveRecord::ConcurrentMigrationError:
无法运行迁移,因为当前正在运行另一个迁移进程。
数据库适配器是mysql2
最初我认为是因为我在开发环境中导入了现有生产数据库中的一些陈旧数据。
但同样的问题也发生在干净创建的数据库上。
为了克服它(因为我确实需要在其他一些问题上取得进展),我不得不在实际的 rails 代码中禁用咨询锁检查。
【问题讨论】:
标签:
ruby-on-rails
mysql2
ruby-on-rails-5.2
【解决方案1】:
经过数小时试图确定“锁定”发生的位置,甚至从头开始创建一个 Rails 应用程序后,事实证明,罪魁祸首是 database.yml 文件中的“cast: false”行。一旦将其注释掉,我的 Rails 世界就恢复了平静,迁移又开始工作了。
发展:
适配器:mysql2
数据库:db
用户名:用户
密码:passwd
主机:本地主机
# 演员表:假
具有讽刺意味的是,我什至不记得两年前代码中的“cast: false”是如何结束的。我依稀记得我把它放在那里是有目的的。尽管如此,没有它,所有测试都可以正常运行,到目前为止,实际应用行为中也没有其他症状。
我希望这可以帮助那些在某个时候升级到 5.2 的人。
【解决方案2】:
你可以这样解除锁定:
key = ActiveRecord::Base.connection.generate_migrator_advisory_lock_key
ActiveRecord::Base.connection.release_advisory_lock(key)