Переключение соединения для поддержки нескольких баз данных не работает в версии Rails 6.0.0.beta3 - PullRequest
2 голосов
/ 23 апреля 2019

Я прочитал документацию о переключении MultiDb-соединения Rails 6.0.0.beta3 и реализовал это следующим образом:

database.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. Буду признателен, если кто-нибудь выяснит эту проблему.

1 Ответ

1 голос
/ 24 апреля 2019

Добавьте следующие параметры в конфигурацию вашей среды:

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
...