FreshConnectionをRails3に対応させました
FreshConnectionのバージョン0.1.0 を作成しました。
https://github.com/tsukasaoishi/fresh_connection/tree/v0.1.0
今回のバージョンから、Rails2は対象外になっているので注意してください。
今までのバージョンと以下の点が変更になっています。
* Rails3対応
* master_clear_connectionのデフォルト値をfalseに変更
* slaveにアクセスしたとき、ログの先頭に slave という表記を追加。今までの masterの表記は廃止
config/database.ymlの設定は過去のバージョンと同様です。前回までのバージョンではrack middlewareの設定が必要でしたが、今バージョンよりそれは不要になっています。railtieで自動的にrackに詰むようにしています。基本的には、Gemfileにfresh_connctionを追加するだけで一通りの機能を使えます。
以下のようなアクションがあった場合、
def tsu
Article.includes(:article_content).first
Article.transaction do
Article.find_by_id(1)
end
Article.where(:id => 100).includes(:article_content).readonly(false).first
render :text => "ok"
end
Railsログは以下のようになります。
[slave] Article Load (0.2ms) SELECT `articles`.* FROM `articles` LIMIT 1
[slave] ArticleContent Load (0.2ms) SELECT `article_contents`.* FROM `article_contents` WHERE `article_contents`.`article_id` IN (1)
(0.2ms) BEGIN
Article Load (0.3ms) SELECT `articles`.* FROM `articles` WHERE `articles`.`id` = 1 LIMIT 1
(0.1ms) COMMIT
Article Load (0.1ms) SELECT `articles`.* FROM `articles` WHERE `articles`.`id` = 100 LIMIT 1
ArticleContent Load (0.1ms) SELECT `article_contents`.* FROM `article_contents` WHERE `article_contents`.`article_id` IN (100)
MySQLのクエリログは以下のようになります。
131207 22:32:08 170 Connect root@localhost on kaeruspoon_development
170 Query SET SQL_AUTO_IS_NULL=0, @@wait_timeout = 2147483
170 Query SELECT `articles`.* FROM `articles` LIMIT 1
170 Query SELECT `article_contents`.* FROM `article_contents` WHERE `article_contents`.`article_id` IN (1)
168 Query BEGIN
168 Query SELECT `articles`.* FROM `articles` WHERE `articles`.`id` = 1 LIMIT 1
168 Query COMMIT
168 Query SELECT `articles`.* FROM `articles` WHERE `articles`.`id` = 100 LIMIT 1
168 Query SELECT `article_contents`.* FROM `article_contents` WHERE `article_contents`.`article_id` IN (100)
170 Quit
期待通りに動作しています。