如何在rails控制台中查看MySQL查询

时间:2011-01-12 09:50:25

标签: ruby-on-rails ruby

有没有办法在rails控制台中查看从ActiveRecord触发哪些MySQL查询?

3 个答案:

答案 0 :(得分:49)

是的,这可以通过将rails log重定向到标准输出来实现。

在控制台提示符中写下这些:

ActiveRecord::Base.logger = Logger.new(STDOUT)
ActiveRecord::Base.connection_pool.clear_reloadable_connections!

此外,您可以将这些行放在〜/ .irbrc文件中,这样每次您不需要手动编写这两行:

require 'rubygems'

if ENV.include?('RAILS_ENV') && ENV["RAILS_ENV"] == 'development'
    ActiveRecord::Base.logger = Logger.new(STDOUT)
    ActiveRecord::Base.connection_pool.clear_reloadable_connections!
end

希望这会有所帮助......

答案 1 :(得分:5)

在Rails 3+中,您可以使用ActiveRecord :: Relation的to_sql方法:

User.where(:id => 3).to_sql
#=> "SELECT \"users\".* FROM \"users\"  WHERE \"users\".\"id\" = 3"

答案 2 :(得分:1)

为每个项目执行此操作的另一种方法受http://guides.rubyonrails.org/debugging_rails_applications.html#what-is-the-logger-questionmark启发:

您可以在environment.rb或任何环境文件中指定备用记录器:

ActiveRecord::Base.logger = Logger.new("log/active_record.log") #This outputs the mysql queries to a file named active_record.log under your project's log folder.

当然,您需要重新启动服务器以使其正常工作。