#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