这是我第一次在 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)