Gem Bullet

Các Bullet gem được thiết kế để giúp bạn tăng hiệu suất của ứng dụng bằng cách giảm số lượng lượt truy vấn .

Cài đặt

$ gem install bullet

Hoặc thêm vào Gemfile rồi bundle install:

gem 'bullet', group: 'development'

Lưu ý: Phải thêm gem bullet vào sau activerecord (rails) và mongoid.

Thiết lập

Thêm vào trong config/environments/development.rb đoạn mã sau đây:

config.after_initialize do
  Bullet.enable = true
  Bullet.sentry = true
  Bullet.alert = true
  Bullet.bullet_logger = true
  Bullet.console = true
  Bullet.growl = true
  Bullet.xmpp = { :account  => '[email protected]',
                  :password => 'bullets_password_for_jabber',
                  :receiver => '[email protected]',
                  :show_online_status => true }
  Bullet.rails_logger = true
  Bullet.honeybadger = true
  Bullet.bugsnag = true
  Bullet.airbrake = true
  Bullet.rollbar = true
  Bullet.add_footer = true
  Bullet.stacktrace_includes = [ 'your_gem', 'your_middleware' ]
  Bullet.stacktrace_excludes = [ 'their_gem', 'their_middleware' ]
  Bullet.slack = { webhook_url: 'http://some.slack.url', channel: '#default', username: 'notifier' }
end

Đoạn mã trên sẽ cho phép bật tất cả hệ thống thông báo của Bullet:

  • Bullet.enable: kích hoạt gem Bullet gem, nhưng không làm gì
  • Bullet.alert: bật lên một cảnh báo JavaScript trong trình duyệt
  • Bullet.bullet_logger: log ra trong file Rails.root/log/bullet.log
  • Bullet.console: log cảnh báo trong console.log của trình duyệt
  • Bullet.growl: bật lên cảnh báo Growl nếu hệ thống của bạn đã cài đặt Growl
  • Bullet.rails_logger: thêm cảnh báo trực tiếp tới Rails log
  • Bullet.honeybadger: thêm thông báo tới Honeybadger
  • Bullet.bugsnag: thêm thông báo tới bugsnag
  • Bullet.airbrake: thêm thông báo tới airbrake
  • Bullet.rollbar: thêm thông báo tới rollbar
  • Bullet.sentry: thêm thông báo tới sentry
  • Bullet.add_footer: thêm thông báo ở phía dưới bên trái page.
  • Bullet.stacktrace_includes: chỉ rõ các đường dẫn dẫn đến query N+1 trong các gem thiết lập
  • Bullet.stacktrace_excludes: bỏ qua các đường dẫn đẫn đến query N+1 trong các gem thiết lập
  • Bullet.slack: thêm thông báo tới slack
  • Bullet.raise: raise errors

Bullet cũng cho phép bạn vô hiệu hóa các mục nếu bạn thấy không cần thiết:

# Each of these settings defaults to true

# Detect N+1 queries
Bullet.n_plus_one_query_enable     = false

# Detect eager-loaded associations which are not used
Bullet.unused_eager_loading_enable = false

# Detect unnecessary COUNT queries which could be avoided
# with a counter_cache
Bullet.counter_cache_enable        = false

Log

Log của Bullet trong file log/bullet.log:

  • N+1 Query:
2009-08-25 20:40:17[INFO] N+1 Query: PATH_INFO: /posts;    model: Post => associations: [comments]·
Add to your finder: :include => [:comments]
2009-08-25 20:40:17[INFO] N+1 Query: method call stack:·
/Users/richard/Downloads/test/app/views/posts/index.html.erb:11:in `_run_erb_app47views47posts47index46html46erb'
/Users/richard/Downloads/test/app/views/posts/index.html.erb:8:in `each'
/Users/richard/Downloads/test/app/views/posts/index.html.erb:8:in `_run_erb_app47views47posts47index46html46erb'
/Users/richard/Downloads/test/app/controllers/posts_controller.rb:7:in `index'
  • Unused eager loading: (includes thừa)
009-08-25 20:53:56[INFO] Unused eager loadings: PATH_INFO: /posts;    model: Post => associations: [comments]·
Remove from your finder: :include => [:comments]
  • Need counter cache:
$2009-09-11 09:46:50[INFO] Need Counter Cache
  Post => [:comments]

Chú ý: Nếu bạn thấy Bullet không hoạt động, thì hãy disable bộ nhớ cache của trình duyệt.

Tài liệu dịch: https://github.com/flyerhzm/bullet