Rails:使数据库复制模型适用于多个数据库

时间:2014-05-28 07:03:06

标签: ruby-on-rails activerecord octopus

我有一个使用2个数据库的rails应用程序(比如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 个答案:

没有答案