先前的rake db:rollback已停止。现在,当尝试新迁移时,我们收到以下错误:
rake aborted!
ActiveRecord::ConcurrentMigrationError:
Cannot run migrations because another migration process is currently running.
/home/me/.rvm/gems/ruby-2.4.1@global/gems/activerecord- 5.1.4/lib/active_record/migration.rb:1315:in `with_advisory_lock'
/home/me/.rvm/gems/ruby-2.4.1@global/gems/activerecord-5.1.4/lib/active_record/migration.rb:1148:in `migrate'
/home/me/.rvm/gems/ruby-2.4.1@global/gems/activerecord-5.1.4/lib/active_record/migration.rb:1007:in `up'
/home/me/.rvm/gems/ruby-2.4.1@global/gems/activerecord-5.1.4/lib/active_record/migration.rb:985:in `migrate'
/home/me/.rvm/gems/ruby-2.4.1@global/gems/activerecord-5.1.4/lib/active_record/tasks/database_tasks.rb:171:in `migrate'
/home/me/.rvm/gems/ruby-2.4.1@global/gems/activerecord-5.1.4/lib/active_record/railties/databases.rake:58:in `block (2 levels) in <top (required)>'
/home/me/.rvm/gems/ruby-2.4.1/gems/rake-12.1.0/exe/rake:27:in `<top (required)>'
/home/me/.rvm/gems/ruby-2.4.1/bin/ruby_executable_hooks:15:in `eval'
/home/me/.rvm/gems/ruby-2.4.1/bin/ruby_executable_hooks:15:in `<main>'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)
我们正在使用Postresql
5条答案
按热度按时间db2dz4w81#
对我来说,它是这样解决的:
选择建议锁定:
ego6inou2#
在Rails5中添加了建议锁定,以防止迁移过程中出现意外的并发错误。修复方法是清除保留的DB锁定。
通过对DB运行以下SQL来查看锁:
要清除锁,请对您的DB运行以下SQL:
af7jpaap3#
所以在我的例子中,查询是不同的
它基本上会告诉你
然后你可以简单地用下面的命令解锁pid:
select pg_advisory_unlock(#{target_pid})
例如:
干杯!
k97glaaz4#
当使用PostgreSQL的连接池时(例如PgBouncer或Yandex Cloud Odyssey中的连接池),
如果连接池模式为“事务”,则添加到database.yml:
如果连接管理器模式为“会话”,则添加到database.yml:
rfbsl7qr5#
我来这里是为了寻找ActiveRecord::ConcurrentMigrationError的解决方案,但在我的情况下,没有任何迁移停止。事实上,我有许多EC2示例运行我的Rails应用,每当我部署新代码时,一些服务器成功完成,而其他服务器则因为上述错误而无法完成。
如果您像我一样,出于同样的原因来到这里,请参见下面我为完成迁移而创建的monkey补丁。