FreshConnectionの0.2.0をリリースしました

Tsukasa OISHI

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