【问题标题】:Rails 6 multiple databases and query timeout problems when running db:migrateRails 6 运行 db:migrate 时多数据库和查询超时问题
【发布时间】:2019-10-23 07:33:15
【问题描述】:

MyModel 上,我使用了使数据库复制工作的配置

connects_to database: { writing: :primary, reading: :follower }

在某些迁移中,有如下查询:

MyModel.update_all(...)

结果是:

PG::QueryCanceled: ERROR:  canceling statement due to statement timeout

如果我删除 connects_to database: { writing: :primary, reading: :follower } 我不会再收到此错误,这以某种方式证明复制设置是迁移文件中此错误的原因。

我知道我可以开始修复所有迁移,但我不想这样做..

【问题讨论】:

    标签: ruby-on-rails database-replication ruby-on-rails-6


    【解决方案1】:

    我注意到 Rails 使用了多个数据库连接,它们相互之间造成了死锁。

    发生这种情况是因为一些模型正确地扩展了 ApplicationRecord(应该定义读/写角色!)但是其中一些模型扩展了 ActiveRecord::Base,这导致打开了比需要更多的连接。

    我的一个尝试也是创建抽象类 ApplicationRecordWithReplication,我将它用于需要复制的模型。这再次导致了比需要更多的数据库连接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-29
      • 1970-01-01
      • 1970-01-01
      • 2017-09-23
      • 1970-01-01
      • 2015-03-14
      • 2011-05-03
      相关资源
      最近更新 更多