ActsAsReadonlyable の使い方

Tsukasa OISHI

 Mysqlのレプリケーションを使って複数のDBサーバを構築しました。RailsでこのDBサーバにアクセスするために、ActsAsReadonlyableというプラグインをはじめて使ってみます。
 まずはプラグインのインストール。

script/plugin install svn://rubyforge.org/var/svn/acts-as-with-ro/trunk/vendor/plugins/acts_as_readonlyable

 それからconfig/database.ymlの設定をします。

production:
  database: rails_app_production
  host:db_master
  ....(省略)....

  read_only_server_1:
    database: rails_app_production
    host: db_slave1
    ....(省略)....

  read_only_server_2:
    database: rails_app_production
    host: db_slave2
    ....(省略)....

 今回はDBが3台なので3台分の設定です。
 あとは、利用したいモデルで、

acts_as_readonlyable [:read_only_server_1, :read_only_server_2]

と指定してあげるだけ。
 すべてのモデルで利用するのならば、config/environment.rbで、

class << ActiveRecord::Base
  def inherited_with_read_only(child)
    child.acts_as_readonlyable [:read_only_server_1, :read_only_server_2]
    inherited_without_read_only(child)
  end
  alias_method_chain :inherited, :read_only
end

としてあげれば大丈夫です。超簡単だね。
LVSとかでスレーブサーバーを管理するなら、そのVIPに対してスレーブをひとつだけ設定すればいいだけです。