Lorsque j'exécute des requêtes (par exemple MyModel.where(...)
ou record.associated_things
) dans la console, comment puis-je voir les requêtes de base de données en cours d'exécution afin de mieux comprendre ce qui se passe?
ruby-on-rails
activerecord
randombits
la source
la source
Réponses:
Rails 3+
Entrez cette ligne dans la console:
Rails 2
Entrez cette ligne dans la console:
la source
ActiveRecord::Base.logger = nil
Dans Rails 3+, vous pouvez utiliser la
to_sql
méthode d' ActiveRecord :: Relation :la source
Il y a la
.explain
méthode dans Rails 4.(
.to_sql
fonctionne aussi, mais ne montrera pas inclus)la source
.explain
volonté de faire le travail et non.to_sql
. Et.explain
ne fournit toujours pas de requête SQL au format brut que je peux exécuter dans la console pg. Mais j'avais besoin de la requête brute pour expliquer et analyser. Je suppose que cela aura à voir avec expliquer pour l'instant.Depuis récemment, vous pouvez utiliser ceci:
https://github.com/dejan/rails_panel
Il se compose d'un module complémentaire de panneau de console de développeur pour Chrome et d'un fichier gem qui doit être ajouté au fichier Gemfile de votre application comme ceci:
Puis exécutez à nouveau:
Redémarrez votre application, ouvrez-la et lancez la console développeur, et vous devriez la voir comme ceci:
la source
À partir de Rails 6, il existe une approche plus pratique: ajoutez simplement la
ActiveRecord::Base.verbose_query_logs = true
console et vous verrez tous les appels SQL et les endroits où il a été appelé. Plus d'infos https://guides.rubyonrails.org/debugging_rails_applications.html#verbose-query-logsla source
Je préfère configurer le niveau de journalisation dans
config/application.rb
:Lors de la production, mon
ENV['LOG_LEVEL']
sera réglé sur la valeur deLogger::INFO
et sur ma machine locale, ce sera le casLogger::DEBUG
.la source