12/08/2018, 17:27

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 . $ 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. ...

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 .

$ 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.

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  => 'bullets_account@jabber.org',
                  :password => 'bullets_password_for_jabber',
                  :receiver => 'your_account@jabber.org',
                  :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

0