我有一个使用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。
由于