¿Cómo mostrar las consultas SQL ejecutadas en la consola Rails?

Respuestas:

249

Rieles 3+

Ingrese esta línea en la consola:

ActiveRecord::Base.logger = Logger.new(STDOUT)

Carriles 2

Ingrese esta línea en la consola:

ActiveRecord::Base.connection.instance_variable_set :@logger, Logger.new(STDOUT)
John Topley
fuente
Perfecto, justo lo que necesitaba. ¿Tiene alguna recomendación sobre dónde ir para encontrar pequeños trucos como estos que están documentados?
randombits
2
Esto funciona para rieles 3+ pero no 2, consulte stackoverflow.com/a/1576221 si todavía está allí :)
rogerdpack
Y para desactivarlo de nuevo: ActiveRecord::Base.logger = nil
Hula_Zell
He estado aquí tantas veces, cuando
escribo
33

En Rails 3+ puedes usar el to_sqlmétodo ActiveRecord :: Relation :

User.where(:id => 3).to_sql
#=> "SELECT \"users\".* FROM \"users\"  WHERE \"users\".\"id\" = 3"
Abhi
fuente
25

Existe el .explainmétodo en Rails 4.
( .to_sqltambién funciona, pero no muestra las inclusiones)

Category.includes(:products).explain
=> EXPLAIN for: SELECT "categories".* FROM "categories" 0|0|0|SCAN TABLE categories

EXPLAIN for: SELECT "categories_products".* FROM "categories_products" WHERE "categories_products"."category_id" IN (1, 2) 0|0|0|SCAN TABLE categories_products

EXPLAIN for: SELECT "products".* FROM "products" WHERE "products"."id" IN (1, 2, 3, 4, 5, 6, 7) 0|0|0|SEARCH TABLE products USING INTEGER PRIMARY KEY (rowid=?) 0|0|0|EXECUTE LIST SUBQUERY 1
lagos son
fuente
Me tomó mucho tiempo encontrar la .explainvoluntad para hacer el trabajo y no .to_sql. Y .explaintodavía no proporciona una consulta SQL en formato sin procesar que pueda ejecutar en la consola pg. Pero necesitaba la consulta en bruto para explicar y analizar. Supongo que tendrá que ver con explicarlo por ahora.
abhishek77 el
4

Recientemente, puede usar esto:

https://github.com/dejan/rails_panel

Consiste en un complemento del panel de la consola del desarrollador para Chrome y un archivo de gema que debe agregarse al Gemfile de su aplicación de esta manera:

group :development do
  gem 'meta_request'
end

Luego corre de nuevo:

bundle install

Reinicie su aplicación, ábrala e inicie la consola de desarrollador, y debería verla así: ingrese la descripción de la imagen aquí

Aleksandar Pavić
fuente
0

Prefiero configurar el nivel de registrador en config/application.rb:

config.after_initialize do
  Rails.logger.level = (ENV['LOG_LEVEL'] || Logger::INFO).to_i
end

En producción, mi ENV['LOG_LEVEL']se establecerá en el valor de Logger::INFOy en mi máquina local será Logger::DEBUG.

Huy Vo
fuente