如何显示在Rails控制台中运行的SQL查询?


115

当我在控制台中运行查询(例如MyModel.where(...)record.associated_things)时,如何查看正在运行的实际数据库查询,以便可以对正在发生的事情有更多的了解?


安德鲁,如果您还需要在浏览器中运行命令,则可以使用github.com/igorkasyanchuk/rails_db
Igor

Answers:


249

Rails 3+

在控制台中输入以下行:

ActiveRecord::Base.logger = Logger.new(STDOUT)

滑轨2

在控制台中输入以下行:

ActiveRecord::Base.connection.instance_variable_set :@logger, Logger.new(STDOUT)

完美,正是我所需要的。有何建议去哪里找到这些小技巧?
randombit


2
这适用于Rails 3+,但不适用于2,如果您仍然在这里,请参阅stackoverflow.com/a/1576221:)
rogerdpack

并再次禁用它: ActiveRecord::Base.logger = nil
Hula_Zell

我去过这里很多次,当我在chrome中输入“ rails”时,它会将该页面显示为最高结果
23tux

33

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

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

25

.explainRails 4中有该方法。
.to_sql也可以,但不会显示包含)

Category.includes(:products).explain
=> EXPLAIN for: SELECT "categories".* FROM "categories" 0|0|0|SCAN TABLE categories

EXPLAIN for: SELECT "categories_products".* FROM "categories_products" WHERE "categories_products"."category_id" IN (1, 2) 0|0|0|SCAN TABLE categories_products

EXPLAIN for: SELECT "products".* FROM "products" WHERE "products"."id" IN (1, 2, 3, 4, 5, 6, 7) 0|0|0|SEARCH TABLE products USING INTEGER PRIMARY KEY (rowid=?) 0|0|0|EXECUTE LIST SUBQUERY 1

我花了很多时间才找到.explain能胜任的意志.to_sql。而且.explain仍然不提供原始格式的sql查询,我可以在pg控制台中运行它。但是我需要原始查询来解释和分析。我想现在与解释有关。
abhishek77

4

从最近开始,您可以使用以下命令:

https://github.com/dejan/rails_panel

它由适用于chrome的开发者控制台面板插件和gem文件组成,需要将其添加到应用程序的Gemfile中,如下所示:

group :development do
  gem 'meta_request'
end

然后再次运行:

bundle install

重新启动您的应用程序,将其打开,然后启动开发人员控制台,您应该看到如下所示: 在此处输入图片说明



0

我更喜欢在以下位置设置记录器级别config/application.rb

config.after_initialize do
  Rails.logger.level = (ENV['LOG_LEVEL'] || Logger::INFO).to_i
end

在生产时,我ENV['LOG_LEVEL']将设置为的值,Logger::INFO在我的本地机器上将是Logger::DEBUG

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.