1

这是我第一次在 Rails 中实现多数据库访问,我使用的是 6.1 版本。

我的要求是SELECT对模型的所有查询都Product应该转到我的只读副本。这就是我在 Rails 6.1 中设置多数据库访问的方式

class MultiDb < ApplicationRecord
  self.abstract_class = true

  connects_to database: { writing: :primary, reading: :primary_replica }
end

class Product < MultiDb
end

class User < ApplicationRecord
end

# database.yml
default: &default
  encoding: unicode
  pool: <%= ENV.fetch('DB_MAX_POOL') { 7 } %>

development:
  primary:
    <<: *default
    url: postgres://product_db_user:@localhost:5432/product_db
  primary_replica:
    <<: *default
    url: postgres://product_db_user:@localhost:5432/non_existing_product_db
    replica: true

non_existing_product_db数据库不存在,注定要失败。但是当我Product.count从 rails 控制台执行时,查询成功执行,这意味着模型正在读取primary而不是primary_replica. 这是为什么?查询不应该失败吗?...因为它应该尝试从primary_replica.

另外,当我执行以下操作时...

ActiveRecord::Base.connected_to(role: :reading) do
  Product.count
end

我确实看到以下错误 -ActiveRecord::NoDatabaseError (FATAL: database "non_existing_product_db" does not exist)

4

0 回答 0