是否有可能在耙式任务上记录sql查询?

问题描述:

与'rails server'类似,它可以打印每个执行的sql查询,我希望为rake任务也做同样的事情。是否有可能在耙式任务上记录sql查询?

实现该目标的最佳方法是什么?

根据您的环境,耙将记录SQL查询,就像任何Rails的进程将在同一日志文件&。因此,在你的开发盒中,检查你的log/development.log文件 - 它将包含你的Rake任务的查询。如果您希望在生产中记录查询,请将Rake任务中的日志级别设置为DEBUG,并确保rake任务取决于:environment。

desc "Task with SQL logging" 
task :test_log => :environment do 
    Rails.logger.level = Logger::DEBUG 
    Your code here... 
end 
+3

啊,我看到他们在development.log,谢谢 – mbdev

rake db:migrate --trace 

的--trace将显示详细信息

+0

它不显示SQL语句 – Aleksey

+0

'尾-f登录/ test.log'应该做的伎俩在另一个终端窗口 – drhenner

+0

那么它应该是答案不是'--trace' – Aleksey

echo '' > log/development.log 
rake db:migrate:redo VERSION=20141017153933 
cat log/development.log 

我试过以上,无法得到它的工作。语法很好,没有错误,但没有SQL来到标准输出(或日志)。我正在使用rails 3.2。我也在生产环境中运行。

要看到我的rake任务生成的SQL查询,我曾经在http://eewang.github.io/blog/2013/07/29/how-to-use-rake-tasks-to-generate-migration-sql/

尤其是发现的技术,我刚插入此块在我的任务查找()之前生成的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。这不是我的代码 - 尤金王提出了这种技术。

可能重复:is it possible to output the sql change scripts that rake db:migrate produces?

有一些不错的选择那里。我最喜欢的当然是我的答案。