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 должен запрашиваться.

Спасибо

0 ответов

Другие вопросы по тегам