Rails 在开发环境中通过 Octopus 进行 Postgresql 复制 gem

Rails Postgresql replication via Octopus gem when in Development env

显然,当使用 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 任务在每个应用程序中创建了完全相同的表格)我想 sync/replicate 我的奴隶:

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 的数据库中复制相同的记录。 <--- 这不会发生。

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

这不是章鱼的目的gem。

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

不会将数据复制到从站。

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

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

如果您受困于旧版本的 PostgreSQL,请查看 alternatives