7

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

とはいえ、Rails アプリで複数のデータベースに動的に接続するためのソリューションが必要です。私の状況では、単純なデータ テーブル (EVENTS、TIMESTAMP、VALUE) を持つ複数のデータ ログ サイトがあります。これらのサイトは、ローカル アプリケーションがそれらを使用する必要があるため、現状のままにしておく必要があります (今後も維持する必要があります)。

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

私の「データ」モデルは、接続先のすべての MySQL データベースで同じままです。単に、別の DB にオンザフライで接続するように MODEL に指示できる必要があります。これが驚くほど単純であることを願っていますが、見ていきます。

4

2 に答える 2

15

ActiveRecord::Base#establish_connectionが必要です。手動接続を使用するモデルがアプリケーションの残りの部分で使用される接続を妨害しないように、抽象サブクラスで使用することをお勧めします。

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

class LogItem < LogBase
  ...
end

LogItem.establish_connection { ... }

LogItem.find_by_ ...

手動接続を行うモデルが 1 つしかない場合は、抽象クラスは不要です。

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

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

# foo.rb
LogItem.establish_connection :atlanta

接続の設定は、サイトがワイド エリア ネットワークで区切られている場合は、2 倍の負荷がかかる可能性があります。抽出-変換-ロード アプローチを使用し、毎時/毎日の cron ジョブを使用してデータを集中レポート サイトにコピーする方が理にかなっているのかどうかを検討します。これは、データ ウェアハウスの最も基本的な形式であり、非常に一般的に使用されるアプローチです。MySql を使用している場合、Maatkit Syncは、テーブルの rsync のように、きちんとした小さなツールです。または、マスター/スレーブ レプリケーションをサポートするデータベースを使用することもできますが、これは維持するのがかなり複雑になる可能性があります。

于 2009-06-12T14:35:01.770 に答える
0

Rails は、すぐに使用できる複数のデータベースをまだサポートしていません (今後もサポートされない可能性があります)。そのモデルの ActiveRecord のデータベース接続をどうにかしてハイジャックする必要があります。

これに関するアクティブ レコードのドキュメントは次のとおりです。オーバーライドする必要がある特定ドキュメントは次のとおりです。

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

この問題に取り組んでいるセミプロダクション対応のプロジェクトいくつかあります。

于 2009-06-08T18:45:36.370 に答える