Rails: работа модели репликации базы данных с несколькими базами данных
У меня есть приложение rails, использующее 2 базы данных (скажем, DB1, DB2). Также DB1 реплицируется в DB3, DB2 в DB4. Я использую gem осьминога для репликации, т.е. все операции записи находятся на DB1 и операции чтения с DB3.
Ниже приведены мои настройки для database.yml
production:
adapter: mysql2
database: DB1
username: root
host: localhost
password: root
pool: 5
timeout: 5000
reconnect: true
DB2_production:
adapter: mysql2
database: DB2
username: root
host: localhost
password: root
pool: 5
timeout: 5000
reconnect: true
Теперь у меня есть файл shards.yml как следующий
octopus:
replicated: true
environments:
- production
- DB2_production
production:
slave1:
adapter: mysql2
database: DB3
username: root
host: localhost
password: root
pool: 5
timeout: 5000
reconnect: true
DB2_production:
slave2:
adapter: mysql2
database: DB4
username: root
host: localhost
password: root
pool: 5
timeout: 5000
reconnect: true
Также я использую 'octopus_establish_connection' для подключения к DB2 в моей модели
class MyModel1 < ActiveRecord::Base
octopus_establish_connection "DB2_#{Rails.env.to_s}"
end
class MyModel2 < ActiveRecord::Base
octopus_establish_connection "DB2_#{Rails.env.to_s}"
end
Так что здесь, если есть запрос на чтение из MyModel1, запрашивается DB3, а для запроса записи запрашивается DB1. Но в MyModel2 для обоих случаев запрашивается DB2, в то время как DB4 должен запрашиваться.
Спасибо