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


115

Cuando ejecuto consultas (por ejemplo, MyModel.where(...)o record.associated_things) en la consola, ¿cómo puedo ver las consultas reales de la base de datos que se están ejecutando para poder comprender mejor lo que está sucediendo?


Andrew, si también necesita ejecutar comandos en el navegador, puede usar github.com/igorkasyanchuk/rails_db
Igor Kasyanchuk

Consulte también esta respuesta: stackoverflow.com/a/1576221/446106
mwfearnley

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)

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"

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

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í



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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.