FreshConnectionの0.2.0をリリースしました
FreshConnectionのバージョン0.2.0をリリースしました。
https://github.com/tsukasaoishi/fresh_connection/tree/v0.2.0
今回のリリースでは以下の機能を追加しました。また、簡単ですがテストコードも追加しています。Rails4.1でもテスト済みです。
■複数のスレーブ群を指定可能に
以前までは、ひとつのスレーブ群しか使えませんでしたが、今バージョンからは複数のスレーブ群を指定可能になりました。
production:
adapter: mysql2
encoding: utf8
reconnect: true
database: kaeru
pool: 5
username: master
password: master
host: localhost
socket: /var/run/mysqld/mysqld.sock
slave:
username: slave
password: slave
host: slave
admin_slave:
username: slave
password: slave
host: admin_slaves
slaveで指定されたロードバランサの先のスレーブ群がデフォルトでは使用されます。
admin_slaveで指定されたものを使いたい場合、それを使うモデルで以下のように宣言します。
class AdminUser < ActiveRecord::Base
establish_fresh_connection :admin_slave
end
これで、AdminUserのselect系クエリは、admin_slaveで指定されたロードバランサにふられます。
establish_fresh_connectionの指定は子クラスにも影響します。
class Parent < ActiveRecord::Base
establish_fresh_connection :admin_slave
end
class AdminUser < Parent
end
class Benefit < Parent
end
こう書くと、AdminUserとBenefitモデルはadmin_slaveロードバランサへクエリを投げるようになります。
デフォルトはslaveで指定したものですが、これは内部的には以下のように宣言しているだけです。
ActiveRecord::Base.establish_fresh_connection :slave
なので、同様の宣言をすればデフォルトの向き先を任意のものに変えることができます。
■スレーブDBを使用しないモデルの宣言方法を変更
以前までのバージョンでは、FreshConnection::SlaveConnection.ignore_modelsでスレーブDBを使用しないモデルを宣言していました。
今バージョンからは、スレーブDBを使用しないモデルの中で以下のように宣言すればいいようになりました。
class SomethingModel < ActiveRecord::Base
master_db_only!
end
これで、SomethinfModelモデルはマスターDBだけを使用するようになります。
また、この宣言も子クラスに影響します。master_db_only!宣言をしたモデルの子クラスも、マスターDBだけを使用するようになります。
■独自のconnection_managerの指定
以前までは、FreshConnection::SlaveConnection.connection_manager= で宣言していましたが、今バージョンからは以下のようになりました。
FreshConnection.connection_manager = MySlaveConnection
今、rubygems.orgの 自分のページを見てみたら、FreshConnectionが一番ダウンロードされていました。まあ、戦闘力5くらいなのですが。
また、今バージョンにあわせたEbisuConnectionの新バージョンもリリースしています。
https://github.com/tsukasaoishi/ebisu_connection/tree/v0.1.0