Project

n_one

0.0
The project is in a healthy, maintained state
N+1 auto-detection for ActiveRecord and PostgreSQL
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
 Dependencies

Runtime

 Project Readme

NOne CI

NOne is able to auto-detect N+1 queries with confidence

Note! It is a rewrite of similar library https://github.com/charkost/prosopite. All credits go there.

How it works

NOne monitors all SQL queries using the Active Support instrumentation and looks for the following pattern which is present in all N+1 query cases:

More than one queries have the same call stack and the same query fingerprint.

Installation

Add this line to your application's Gemfile:

gem 'pg_query'
gem 'n_one'

And then execute:

$ bundle install

Or install it yourself as:

$ gem install n_one

Development Environment Usage

NOne auto-detection can be enabled on all controllers:

class ApplicationController < ActionController::Base
  unless Rails.env.production?
    around_action do
      NOne.scan! do
        yield
      end
    end
  end
end

Test Environment Usage

And each test can be scanned with:

# spec/spec_helper.rb
config.around(:each) do |example|
  NOne.scan! do
    example.run
  end
end

or with custom code using scan report

# spec/your_spec.rb
it 'has no N+1 queries' do
  n_ones = NOne.scan do
    MyAction.perform(arguments)
  end
  
  expect(n_ones.size).to eq(0)
end

Whitelisting

Ignore notifications for call stacks containing one or more substrings:

  NOne.scan!(whitelist: 'myapp/lib/known_n_plus_ones/') do
    example.run
  end

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/prikha/n_one.

License

NOne is licensed under the Apache License, Version 2.0. See LICENSE.txt for the full license text.