Переключение соединения для поддержки нескольких баз данных не работает в Rails версии 6.0.0.beta3

#ruby-on-rails #ruby-on-rails-6

#ruby-on-rails #ruby-on-rails-6

Вопрос:

Я прочитал документацию о переключении соединений с несколькими базами данных в Rails 6.0.0.beta3 и реализован таким образом:

database.yml

 default: amp;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_copy, а при извлечении записи — из базы данных r6_multidb_development_copy. Но в обоих случаях, когда запись вставляется и извлекается, это происходит из основной конфигурации, которая является базой данных r6_multidb_development.

Я считаю, что запись в базу данных должна выполняться из r6_multidb_development_copy, а чтение должно выполняться из r6_multidb_development_copy. Я был бы признателен, если кто-нибудь разберется с этой проблемой.

Ответ №1:

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

 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