Wie kann ich beim Ausführen von Abfragen (z. B. MyModel.where(...)
oder record.associated_things
) in der Konsole die tatsächlich ausgeführten Datenbankabfragen anzeigen, um besser zu verstehen, was passiert?
ruby-on-rails
activerecord
Randombits
quelle
quelle
Antworten:
Schienen 3+
Geben Sie diese Zeile in die Konsole ein:
Schienen 2
Geben Sie diese Zeile in die Konsole ein:
quelle
ActiveRecord::Base.logger = nil
In Rails 3+ können Sie die
to_sql
Methode von ActiveRecord :: Relation verwenden:quelle
Es gibt die
.explain
Methode in Rails 4.(
.to_sql
funktioniert auch, zeigt aber keine Includes an)quelle
.explain
Wille den Job macht und nicht.to_sql
. Und.explain
bietet immer noch keine SQL-Abfrage im Rohformat, die ich in der pg-Konsole ausführen kann. Aber ich brauchte die rohe Abfrage, um zu erklären und zu analysieren. Ich denke, das wird vorerst mit Erklären zu tun haben.Seit kurzem können Sie Folgendes verwenden:
https://github.com/dejan/rails_panel
Es besteht aus einem Add-On für das Entwicklerkonsolenpanel für Chrome und einer Gem- Datei, die wie folgt zur Gemfile Ihrer Anwendung hinzugefügt werden muss :
Dann nochmal laufen lassen:
Starten Sie Ihre Anwendung neu, öffnen Sie sie und starten Sie die Entwicklerkonsole. Sie sollten dies folgendermaßen sehen:
quelle
Ab Rails 6 gibt es einen bequemeren Ansatz: Fügen
ActiveRecord::Base.verbose_query_logs = true
Sie einfach die Konsole hinzu, und Sie sehen alle SQL-Aufrufe und Orte, an denen sie aufgerufen wurden. Weitere Informationen unter https://guides.rubyonrails.org/debugging_rails_applications.html#verbose-query-logsquelle
Ich bevorzuge es, die Logger-Ebene einzurichten in
config/application.rb
:Bei der Produktion wird mein
ENV['LOG_LEVEL']
Wert auf den Wert vonLogger::INFO
und auf meinem lokalen Computer eingestelltLogger::DEBUG
.quelle