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。有关于如何设置它的教程,例如
- http://www.rassoc.com/gregr/weblog/2013/02/16/zero-to-postgresql-streaming-replication-in-10-mins/
- http://prongs.org/blog/postgresql-replication
如果您受困于旧版本的 PostgreSQL,请查看 alternatives。
显然,当使用 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。有关于如何设置它的教程,例如
- http://www.rassoc.com/gregr/weblog/2013/02/16/zero-to-postgresql-streaming-replication-in-10-mins/
- http://prongs.org/blog/postgresql-replication
如果您受困于旧版本的 PostgreSQL,请查看 alternatives。