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