ひとつのMySQLサーバーだけでなく、もうひとつ別のMySQLサーバーに接続したい欲張りさんのための方法。
database.yml
development:
# ひとつめはいつもどおり
adapter: mysql2
encoding: utf8
database: database1
username: hoge
password: hogehoge
host: database1.url
port: 3306
pool: 5
timeout: 5000
test:
# 略
production:
# 略
# ふたつめ
database2:
adapter: mysql2
encoding: utf8
database: database2
username: fuga
password: fugafuga
host: database2.url
port: 3306
pool: 5
timeout: 5000
modelを作成し、establish_connectionの引数にdatabase.ymlに追加した設定を指定する
futatsume.rb
class Futatsume < ActiveRecord::Base
establish_connection(:database2)
end
ここまでできればあとはcontrollerから同じ使い方ができる
test_controller.rb
def test
@futatsume = Futatsume.where(["name = ?", "test"])
end
しかししかし、
modelひとつひとつにestablish_connectionでデータベースを指定すると、
model毎にコネクションをはるっぽいので、DB接続コネクション数が異常に増えることになる。
なので、こうするのがベター
futatsume.rb
class Futatsume < ActiveRecord::Base
establish_connection(:database2)
end
futasume_user.rb
class FutatsumeUser < Futatsume
end
futasume_task.rb
class FutasumeTask < Futasume
end
もとのFutatsumeクラスを継承するかたちに実装する。
使い方は同じ
test_controller.rb
def test
@futatsume_user = FutatsumeUser.where(["name = ?", "test"])
@futasume_tasks = FutatsumeUser.where(["id > ?", 10])
end