1

显然,当使用 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 - 在master的数据库中创建记录。

2 - 在slave1的数据库中复制相同的记录。<--- 这不会发生。

4

2 回答 2

2

这不是 Octopus gem 的目的。

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

它不会数据复制到从站。

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

PostgreSQL 有几个选项。如果您使用的是更新版本(9.1+),您可以在“热备”模式下使用集成流式复制。有关于如何设置它的教程,例如

如果您坚持使用旧版本的 PostgreSQL,请查看替代方案

于 2015-10-08T08:43:12.320 回答
0

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

于 2015-10-03T16:06:15.707 回答