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の DBにレコードを作成します。

2 - slave1の DBで同じレコードを複製します。<--- これは起こっていません。

4

2 に答える 2

2

それは Octopus gem の目的ではありません。

読み取り操作か書き込み操作かに応じて、データベース要求をリダイレクトします。そうすれば、現在のデータベース接続について考えずに Rails モデルを使用でき、それが意図した操作に適合するかどうかを確認できます。

データをスレーブにコピーしません。

実際のレプリケーション、つまりマスターからスレーブへのデータ転送を実行するには、自分で設定する必要があります。

PostgreSQL にはいくつかのオプションがあります。新しいバージョン (9.1+) を使用している場合は、統合ストリーミング レプリケーションを「ホット スタンバイ」モードで使用できます。設定方法に関するチュートリアルがあります。

古いバージョンの PostgreSQL を使用している場合は、代替案を参照してください。

于 2015-10-08T08:43:12.320 に答える
0

fully_replicated: false構成にafterを追加してみてくださいreplicated: true

于 2015-10-03T16:06:15.707 に答える