Hatena::Groupkdri

KazusaAPI開発日誌 このページをアンテナに追加 RSSフィード

2008-01-08

Magic Multi-Connections をつかって、ひとつの Rails アプリから複数のデータベースを利用する

|   Magic Multi-Connections をつかって、ひとつの Rails アプリから複数のデータベースを利用する - KazusaAPI開発日誌 を含むブックマーク はてなブックマーク -   Magic Multi-Connections をつかって、ひとつの Rails アプリから複数のデータベースを利用する - KazusaAPI開発日誌   Magic Multi-Connections をつかって、ひとつの Rails アプリから複数のデータベースを利用する - KazusaAPI開発日誌 のブックマークコメント

ActiveRecord はひとつのデータベースコネクションだけしか持てないけど、 no title をつかうと複数のデータベースコネクションを一つの Rails アプリで扱うことが出来る。

同一ホストにある MySQL のデータベース同士なら、モデルに set_table_name "alternativedb.table_name" というようにすると別のデータベースにアクセスできるが、この方法ではホストの異なるアクセスは不可能である。

目的

アプリ(AppA)からほかのアプリ(AppB)にあるユーザアカウント情報を使いたい。

方法

Magic Multi-Connections を gem でインストールする。

AppB のデータベースが localhost の MySQL の appb_production の場合、AppA/config/database.yml に AppB のデータベースのコネクション情報を追加する。

appb_db:
  adapter: mysql
  user: user
  password: pass
  database: appb_production
  host: localhost 

AppBのアカウント情報のモデルを追加する。AppA/app/models/account.rb を AppA/app/models/appb/account.rbにコピー。ここの models/appb/account.rb は AppB::Account に相当する。

AppA/config/environment.rb に AppB のデータベースの接続情報を追加する。

require 'magic_multi_connections'

module AppB
  establish_connection :appb_db
end

script/console で確認する。AppB モジュール付きのモデルは appb_db に接続する。

>> AppB::Account.find(:all)

まとめ

  1. Magic Multi-Connections をつかった複数のデータベースの利用をおこなった
  2. モデルのファイル名規約は便利
  3. 設定情報を共有したいときに便利かも