Когда я запускаю запросы (например, MyModel.where(...)
или record.associated_things
) в консоли, как я могу увидеть, как выполняются фактические запросы к базе данных, чтобы я мог лучше понять, что происходит?
ruby-on-rails
activerecord
рандомбиты
источник
источник
Ответы:
Рельсы 3+
Введите эту строку в консоль:
Рельсы 2
Введите эту строку в консоль:
источник
ActiveRecord::Base.logger = nil
В Rails 3+ вы можете использовать
to_sql
метод ActiveRecord :: Relation :источник
В
.explain
Rails 4 есть метод(
.to_sql
тоже работает, но не включает)источник
.explain
будет делать работу, а не работать.to_sql
. И по-.explain
прежнему не предоставляет sql-запрос в необработанном формате, который я могу запустить в консоли pg. Но мне нужен был необработанный запрос, чтобы объяснить и проанализировать. Думаю, пока придется заняться объяснением.С недавнего времени вы можете использовать это:
https://github.com/dejan/rails_panel
Он состоит из надстройки панели консоли разработчика для Chrome и файла gem, который необходимо добавить в Gemfile вашего приложения следующим образом:
Затем снова запустите:
Перезагрузите приложение, откройте его и запустите консоль разработчика, и вы должны увидеть это так:
источник
Начиная с Rails 6 есть более удобный подход: просто добавьте
ActiveRecord::Base.verbose_query_logs = true
в консоль, и вы увидите все вызовы SQL и места, где он был вызван. Подробнее https://guides.rubyonrails.org/debugging_rails_applications.html#verbose-query-logsисточник
Я предпочитаю устанавливать уровень логгера в
config/application.rb
:В процессе производства my
ENV['LOG_LEVEL']
будет установлено значение,Logger::INFO
а на моем локальном компьютере будетLogger::DEBUG
.источник