Репликация Rails Postgresql через гем Octopus в разработке env

Очевидно, что при использовании Gem Octopus для репликации 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. <--- Этого не происходит.

2 ответа

Решение

Это не цель драгоценного камня Осьминога.

Он перенаправляет запросы к базе данных в зависимости от того, является ли это операцией чтения или записи. Таким образом, вы можете использовать свои модели Rails, не задумываясь о текущем соединении с базой данных и о том, соответствует ли оно предполагаемой операции.

Он не копирует данные на подчиненные.

Чтобы выполнить фактическую репликацию, то есть передачу данных от ведущего устройства к ведомым, вы должны настроить его самостоятельно.

Есть несколько вариантов с PostgreSQL. Если вы используете более новую версию (9.1+), вы можете использовать встроенную потоковую репликацию в режиме "горячего резерва". Есть инструкции по настройке, например

Если вы застряли в более старой версии PostgreSQL, взгляните на альтернативы.

Попробуйте добавить fully_replicated: false после replicated: true в вашем конфиге.

Другие вопросы по тегам