質問

私はこの主題に関する既存の質問/スレッドの多くを読みましたが、それを覚えておいてください なし それらのうち、私の問題に直接対処しました。また、これはそうであることに留意してください いいえ 私は事前にDB情報がわからないので、database.ymlの状況。

とはいえ、私は解決策が必要です 動的に Railsアプリ内の複数のデータベースに接続します。私の状況では、すべてのデータテーブル(イベント、タイムスタンプ、値)がある複数のデータロギングサイトがあります。これらのサイトは、それらを使用する必要があるローカルアプリケーションが原因であるため、維持する必要があります(およびする必要があります)。

必要なのは、「mysql_logins」のテーブルを維持し、それらの各ログインを使用してさまざまなデータベースのいずれかに接続し、そのデータにチャート/グラフを提供するアプリケーションを作成することです。

私の「データ」モデルは、私が接続するすべてのMySQLデータベースで同じままです。単に、モデルに別のDBに接続するように指示できる必要があります。これが驚くほど簡単であることを願っていますが、わかります。

役に立ちましたか?

解決

あなたが欲しい ActiverCord :: Base#Enditish_Connection. 。おそらく、手動接続を使用したモデルがアプリケーションの残りの部分での接続の使用を妨げないように、抽象サブクラスで使用することをお勧めします。

class LogBase < ActiveRecord::Base
  self.abstract_class = true
end

class LogItem < LogBase
  ...
end

LogItem.establish_connection { ... }

LogItem.find_by_ ...

手動接続を行うモデルが1つだけある場合、抽象クラスは不要です。

接続できるデータベースの完全なセットを知っていますか?もしそうなら、データベース.ymlはあなたにとってまだ役立つかもしれません。すべての情報をディレクトリとしてそこに配置し、各データベースに名前を付けることができます。次に、それらの名前を使用してアプリケーションで_Connectionを設定するために動的に選択します。

# database.yml
atlanta:
  host: atlantadb.foo.com

# foo.rb
LogItem.establish_connection :atlanta

接続のセットアップは非常にヘビー級である可能性があるため、サイトが広いエリアネットワークで分離されている場合。抽出トランスフォームロードアプローチを使用し、1時間/毎日のCronジョブを使用して集中型レポートサイトにデータをコピーする方が理にかなっているかどうかを考えます。これはデータウェアハウスの最も基本的な形式であり、非常に一般的に使用されるアプローチです。 mysqlを使用している場合、 Maatkit Sync テーブル用のrsyncのようなきちんとした小さなツールです。あるいは、おそらくマスタースレーブレプリケーションをサポートするデータベースを使用しますが、メンテナンスはかなり複雑になる可能性があります。

他のヒント

Railsは、箱から出して複数のデータベースをまだサポートしていません(誰も知らないかもしれません)。そのモデルのActiverCordのデータベース接続を何らかの形でハイジャックする必要があります。

ここ これのアクティブな記録文書であり、これが 特定のドキュメント オーバーライドする必要があります。

これ プロセスを本当によく説明しているものです。

もあります いくつか セミプロダクションの準備 プロジェクト この問題を攻撃します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top