2

我已阅读有关 Rails 6.0.0.beta3 的 MultiDb 连接切换的文档并以这种方式实现:

数据库.yml

default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password: root
socket: /var/run/mysqld/mysqld.sock

development:
  main:
    <<: *default
    database: r6_multidb_development

  main_replica:
    <<: *default
    database: r6_multidb_development_copy
    replica: true

文章模型

class Article < ApplicationRecord
  connect_to database: { writing: :main, reading: :main_replica }
end

数据库 r6_multidb_development 和 r6_multidb_development_copy 都有不同的记录,我期待在创建记录时记录应该插入到 r6_multidb_development 数据库中,并且在检索记录时应该从 r6_multidb_development_copy 数据库中。但是在这两种情况下,当插入和检索记录时,它都是从 r6_multidb_development 数据库的主配置发生的。

我相信写入数据库应该从 r6_multidb_development 发生,读取应该从 r6_multidb_development_copy 发生。如果有人能解决这个问题,我将不胜感激。

4

1 回答 1

1

Add following options to your environment config:

config.active_record.database_selector = { delay: 2.seconds }
config.active_record.database_resolver = ActiveRecord::Middleware::DatabaseSelector::Resolver
config.active_record.database_resolver_context = ActiveRecord::Middleware::DatabaseSelector::Resolver::Session
于 2019-04-24T13:45:40.270 回答