Quando executo consultas (por exemplo, MyModel.where(...)
ou record.associated_things
) no console, como posso ver as consultas reais do banco de dados sendo executadas para obter mais compreensão do que está acontecendo?
ruby-on-rails
activerecord
randombits
fonte
fonte
Respostas:
Rails 3+
Insira esta linha no console:
Rails 2
Insira esta linha no console:
fonte
ActiveRecord::Base.logger = nil
No Rails 3+ você pode usar o
to_sql
método ActiveRecord :: Relation :fonte
Existe o
.explain
método no Rails 4.(
.to_sql
funciona também, mas não mostra inclui)fonte
.explain
vontade do trabalho e não.to_sql
. E.explain
ainda não fornece consulta sql em formato raw que posso rodar no console pg. Mas eu precisava da consulta bruta para explicar e analisar. Eu acho que vai ter a ver com explicar por enquanto.Recentemente, você pode usar isto:
https://github.com/dejan/rails_panel
Ele consiste em um complemento do painel do console do desenvolvedor para cromo e um arquivo gem que precisa ser adicionado ao Gemfile do seu aplicativo como este:
Em seguida, execute novamente:
Reinicie seu aplicativo, abra-o e inicie o console do desenvolvedor, e você deve vê-lo assim:
fonte
A partir do Rails 6, há uma abordagem mais conveniente: simplesmente adicione
ActiveRecord::Base.verbose_query_logs = true
no console e você verá todas as chamadas SQL e locais onde foi chamado. Mais informações https://guides.rubyonrails.org/debugging_rails_applications.html#verbose-query-logsfonte
Eu prefiro configurar o nível de logger em
config/application.rb
:Na produção, meu
ENV['LOG_LEVEL']
será definido como o valor deLogger::INFO
e na minha máquina local seráLogger::DEBUG
.fonte