Можно ли регистрировать SQL-запросы на грабли? - PullRequest
13 голосов
/ 24 ноября 2011

Подобно 'rails server', который печатает каждый выполненный SQL-запрос, я бы хотел сделать то же самое для задач rake.

Каков наилучший способ достичь этого?

Ответы [ 5 ]

15 голосов
/ 24 ноября 2011

В зависимости от вашей среды, Rake будет регистрировать SQL-запросы так же, как любой процесс Rails и в одном и том же файле журнала.Итак, на вашем устройстве dev проверьте ваш файл log / development.log - он будет содержать запросы вашей задачи Rake.Если вы хотите, чтобы запросы регистрировались в рабочей среде, установите уровень журнала в вашей задаче Rake на DEBUG и убедитесь, что задача граблей зависит от: environment.

desc "Task with SQL logging"
task :test_log => :environment do
  Rails.logger.level = Logger::DEBUG
  Your code here...
end
5 голосов
/ 24 ноября 2011
rake db:migrate  --trace

--trace покажет детали

4 голосов
/ 17 октября 2014
echo '' > log/development.log
rake db:migrate:redo VERSION=20141017153933
cat log/development.log
1 голос
/ 18 июля 2018

Правильный ответ - поставить это в начале рейка:

ActiveRecord::Base.logger = Logger.new STDOUT
1 голос
/ 19 сентября 2015

Я попробовал вышеописанное и не смог заставить его работать.Синтаксис был в порядке, без ошибок, но не пришел SQL на стандартный вывод (или журнал).Я использую рельсы 3.2.Я также работаю в производственной среде.

Чтобы увидеть sql запросы, сгенерированные моими задачами rake, я использовал технику, найденную в http://eewang.github.io/blog/2013/07/29/how-to-use-rake-tasks-to-generate-migration-sql/

В частности, я только что вставил этот блокв моей задаче перед операторами find (), которые генерировали SQL-запросы, в которые я был вставлен:

  ActiveRecord::Base.connection.class.class_eval do
    # alias the adapter's execute for later use
    alias :old_execute :execute

    # define our own execute
    def execute(sql, name = nil)
      print "===== #{sql}\n"
      old_execute sql, name
    end
  end

Тогда я мог видеть SQL на stdout.Это не мой код - Юджин Ван придумал эту технику.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...