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?
ruby-on-rails
activerecord
randombit
sumber
sumber
Jawaban:
Rel 3+
Masukkan baris ini di konsol:
Rel 2
Masukkan baris ini di konsol:
sumber
ActiveRecord::Base.logger = nil
Di Rails 3+ Anda dapat menggunakan
to_sql
metode ActiveRecord :: Relation :sumber
Ada
.explain
metode di Rails 4.(
.to_sql
berfungsi juga, tetapi tidak akan ditampilkan termasuk)sumber
.explain
kemauan melakukan pekerjaan itu dan tidak.to_sql
. Dan.explain
masih 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.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:
Lalu jalankan lagi:
Mulai ulang aplikasi Anda, buka, dan luncurkan konsol pengembang, dan Anda akan melihatnya seperti ini:
sumber
Mulai dari Rails 6 ada pendekatan yang lebih mudah: cukup tambahkan
ActiveRecord::Base.verbose_query_logs = true
konsol dan Anda akan melihat semua panggilan SQL dan tempat pemanggilannya. Info selengkapnya https://guides.rubyonrails.org/debugging_rails_applications.html#verbose-query-logssumber
Saya lebih suka mengatur level logger di
config/application.rb
:Saat produksi,
ENV['LOG_LEVEL']
keinginan saya disetel ke nilaiLogger::INFO
dan pada mesin lokal sayaLogger::DEBUG
.sumber