2011-11-23 105 views

回答

14

根据您的环境,耙将记录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

4
rake db:migrate --trace 

的--trace将显示详细信息

+0

它不显示SQL语句 – Aleksey

+0

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

+0

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

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

我试过以上,无法得到它的工作。语法很好,没有错误,但没有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。这不是我的代码 - 尤金王提出了这种技术。

相关问题