Kiedy uruchamiam zapytania (np. MyModel.where(...)
Lub record.associated_things
) w konsoli, jak mogę zobaczyć rzeczywiste zapytania do bazy danych, aby lepiej zrozumieć, co się dzieje?
ruby-on-rails
activerecord
randombity
źródło
źródło
Odpowiedzi:
Szyny 3+
Wpisz ten wiersz w konsoli:
Szyny 2
Wpisz ten wiersz w konsoli:
źródło
ActiveRecord::Base.logger = nil
W Railsach 3+ możesz użyć
to_sql
metody ActiveRecord :: Relation :źródło
Jest
.explain
metoda w Railsach 4.(
.to_sql
działa też, ale nie pokazuje dołączeń)źródło
.explain
testamentu, a nie.to_sql
. I.explain
nadal nie zapewnia zapytania sql w formacie surowym, które mogę uruchomić w konsoli pg. Ale potrzebowałem surowego zapytania, aby wyjaśnić i przeanalizować. Myślę, że na razie trzeba będzie wyjaśnić.Od niedawna możesz tego używać:
https://github.com/dejan/rails_panel
Składa się z dodatku panelu konsoli programisty dla Chrome i pliku gem, który należy dodać do pliku Gemfile aplikacji w następujący sposób :
Następnie uruchom ponownie:
Uruchom ponownie aplikację, otwórz ją i uruchom konsolę programisty, a powinieneś zobaczyć to tak:
źródło
Począwszy od Rails 6 jest wygodniejsze podejście: po prostu dodaj
ActiveRecord::Base.verbose_query_logs = true
w konsoli, a zobaczysz wszystkie wywołania SQL i miejsca, w których został wywołany. Więcej informacji https://guides.rubyonrails.org/debugging_rails_applications.html#verbose-query-logsźródło
Wolę ustawić poziom rejestratora w
config/application.rb
:Na produkcji mój
ENV['LOG_LEVEL']
będzie ustawiony na wartość,Logger::INFO
a na moim komputerze lokalnym będzieLogger::DEBUG
.źródło