N+1問題の対策のため、「Bullet」をインストール

N+1問題の対策のため、「Bullet」をインストールした。

BulletはN+1問題を検出してくれます。

[環境]
Windows8
Ruby 1.9.3(p125)
Ruby on Rails 3.2.9


Gemfileに下記のように記述する。

group :development do
  # N+1問題の警告を出力
  gem "bullet"
end

コマンドプロンプトでbundle installを実行する。

bundle insatall

config\environments\development.rbに下記を追記する。

config.after_initialize do
  Bullet.enable = true # Bulletプラグインを有効
  Bullet.alert = true # JavaScriptでの通知
  Bullet.bullet_logger = true # log/bullet.logへの出力
  Bullet.console = true # ブラウザのコンソールログに記録
  Bullet.rails_logger = true # Railsログに出力
  #Bullet.disable_browser_cache = true #ブラウザキャッシュの無効化
end

※disable_browser_cacheも設定するように書いてありましたが、私の環境では設定できませんでした。


開発環境で実際にWebサービスを動かすと、N+1問題が発生しているクエリが実行されたら、警告メッセージが表示される。
「:include => [:person]」を追記するように言われるが、rails3の場合は「includes(:person)」を追記すればいいみたい。
コントローラーに下記のように修正する。

# @blogs = Blog.order(:id)
@blogs = Blog.order(:id).includes(:person)


[Rails 高速化] ページキャッシュとN+1対策 - 酒と泪とRubyとRailsと
» Railsライブラリ紹介: N+1問題を検出する「bullet」 TECHSCORE BLOG