在开发env

时间:2015-09-30 14:28:13

标签: ruby-on-rails ruby postgresql replication octopus

显然,当使用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; ---这正在发生。

2 个答案:

答案 0 :(得分:2)

这不是八达通宝石的目的。

它重定向数据库请求,具体取决于它是读取还是写入操作。这样,您可以使用Rails模型,而无需考虑当前的数据库连接以及它是否符合预期的操作。

将数据复制到奴隶。

要执行实际复制,即从主服务器到从服务器的数据传输,您必须自己进行设置。

PostgreSQL有几种选择。如果您使用的是较新版本(9.1+),则可以使用集成的streaming replication in "hot standby" mode。有关于如何设置它的教程,例如

如果您遇到较旧版本的PostgreSQL,请查看alternatives

答案 1 :(得分:0)

尝试在配置中fully_replicated: false之后添加replicated: true