Bagaimana cara menampilkan kueri SQL yang dijalankan di konsol Rails?


115

Ketika saya menjalankan kueri (mis. MyModel.where(...)Atau record.associated_things) di konsol, bagaimana saya dapat melihat kueri basis data yang sebenarnya sedang dijalankan sehingga saya dapat memperoleh lebih banyak pemahaman tentang apa yang terjadi?


Andrew, jika Anda juga perlu menjalankan perintah di browser, Anda dapat menggunakan github.com/igorkasyanchuk/rails_db
Igor Kasyanchuk

Jawaban:


249

Rel 3+

Masukkan baris ini di konsol:

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

Rel 2

Masukkan baris ini di konsol:

ActiveRecord::Base.connection.instance_variable_set :@logger, Logger.new(STDOUT)

Sempurna, hanya yang saya butuhkan. Punya rekomendasi kemana harus mencari trik kecil seperti ini yang didokumentasikan?
randombits


2
Ini berfungsi untuk rel 3+ tetapi tidak 2, lihat stackoverflow.com/a/1576221 jika Anda masih di sana :)
rogerdpack

Dan untuk menonaktifkannya lagi: ActiveRecord::Base.logger = nil
Hula_Zell

Saya sudah sering ke sini, saat saya mengetik "rel" di chrome, halaman ini akan ditampilkan sebagai hasil teratas
23tux

33

Di Rails 3+ Anda dapat menggunakan to_sqlmetode ActiveRecord :: Relation :

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

25

Ada .explainmetode di Rails 4.
( .to_sqlberfungsi juga, tetapi tidak akan ditampilkan termasuk)

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

Saya membutuhkan begitu banyak waktu untuk menemukan .explainkemauan melakukan pekerjaan itu dan tidak .to_sql. Dan .explainmasih tidak menyediakan query sql dalam format mentah yang dapat saya jalankan di konsol pg. Tapi saya membutuhkan kueri mentah untuk menjelaskan dan menganalisis. Saya kira harus dilakukan dengan menjelaskan untuk saat ini.
abhishek77in

4

Mulai baru-baru ini, Anda dapat menggunakan ini:

https://github.com/dejan/rails_panel

Ini terdiri dari add-on panel konsol pengembang untuk chrome, dan file permata yang perlu ditambahkan ke Gemfile aplikasi Anda seperti ini:

group :development do
  gem 'meta_request'
end

Lalu jalankan lagi:

bundle install

Mulai ulang aplikasi Anda, buka, dan luncurkan konsol pengembang, dan Anda akan melihatnya seperti ini: masukkan deskripsi gambar di sini



0

Saya lebih suka mengatur level logger di config/application.rb:

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

Saat produksi, ENV['LOG_LEVEL']keinginan saya disetel ke nilai Logger::INFOdan pada mesin lokal saya Logger::DEBUG.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.