显然,当使用Octopus gem进行Postgres复制时,一切都应该即插即用。但是,我似乎无法找到我做错的事情。
这是我的config/shards.yml
octopus:
environments:
- development
replicated: true
development:
slave1:
adapter: postgresql
host: localhost
database: slaveapp_development
username: pguser
password: pgpass
AR模型Provider
(我通过Rake任务在每个应用程序中创建完全相同的表)我想同步/复制到我的奴隶:
class Provider < ActiveRecord::Base
has_many :products
replicated_model()
end
我通过Rails服务器启动这两个应用程序,并从那里进入 Masterapp 的控制台:
> Provider.using(:slave1).create({provider_params...})
#=> works! I get a new record in slave1's DB.
> Provider.using(:master).create({provider_params...})
#=> works partly. Creates record only in master's DB.
问题在于,在致电Provider.using(:master)...
时,我期待:
1 - 在主的数据库中创建记录。
2 - 在 slave1 的数据库中复制相同的记录。 &lt; ---这不正在发生。
答案 0 :(得分:2)
这不是八达通宝石的目的。
它重定向数据库请求,具体取决于它是读取还是写入操作。这样,您可以使用Rails模型,而无需考虑当前的数据库连接以及它是否符合预期的操作。
它不将数据复制到奴隶。
要执行实际复制,即从主服务器到从服务器的数据传输,您必须自己进行设置。
PostgreSQL有几种选择。如果您使用的是较新版本(9.1+),则可以使用集成的streaming replication in "hot standby" mode。有关于如何设置它的教程,例如
如果您遇到较旧版本的PostgreSQL,请查看alternatives。
答案 1 :(得分:0)
尝试在配置中fully_replicated: false
之后添加replicated: true
。