新gem bullet功能与使用

Published on:

通常都會用 Bullet 來檢查 N + 1 Query 問題(對資料庫額外執行多個查詢子句而影響效能)

Bullet 會在執行查詢的時候,將發生 N + 1 Query 的部分輸出於 log 上

修改專案中的 Gemfile 透過 bundle 安裝

group :test, :development do
  gem 'bullet'
end

將 Bullet 加入到 development 與 test 群組以看到 Bullet 所產生的 log

修改 config/environments/test.rb,加入以下設定

config.after_initialize do
  Bullet.enable = true
  Bullet.bullet_logger = true
  Bullet.raise = true # raise an error if n+1 query occurs


end

並在 spec/spec_helper.rb 或 spec/rails_helper.rb 中加入以下設定

RSpec.configure do |config|

  # other configures...


  
  if Bullet.enable?
    config.before(:each) do
      Bullet.start_request
    end

    config.after(:each) do
      Bullet.perform_out_of_channel_notifications if Bullet.notification?
      Bullet.end_request
    end
  end
end

這樣在跑測試的時候,如果有 N + 1 Query 時就會無法通過測試

再依照出現的訊息去改善程式吧

Comments

comments powered by Disqus