【发布时间】:2011-10-16 14:21:29
【问题描述】:
我正在为我的 rails 3 应用程序编写规范。我想测试数据库事务是否真的有效。能够在规范驱动的同时查看正在生成我的应用程序的 sql 查询将非常有帮助。
有没有办法像在 rails 控制台中一样查看查询?
我正在使用 Rails 3.0.9、RSpec 2.6 和 sqlite(稍后将迁移到 mysql)
【问题讨论】:
标签: sql ruby-on-rails testing logging rspec
我正在为我的 rails 3 应用程序编写规范。我想测试数据库事务是否真的有效。能够在规范驱动的同时查看正在生成我的应用程序的 sql 查询将非常有帮助。
有没有办法像在 rails 控制台中一样查看查询?
我正在使用 Rails 3.0.9、RSpec 2.6 和 sqlite(稍后将迁移到 mysql)
【问题讨论】:
标签: sql ruby-on-rails testing logging rspec
把它放在你的规格中:
ActiveRecord::Base.logger = Logger.new(STDOUT) if defined?(ActiveRecord::Base)
您可以tail -f log/test.log 看看发生了什么。一个但不是两个。
为 Rails 5.2 编辑,添加这一行:
ActiveRecord::Base.verbose_query_logs = true
感谢Mike Monteiro 的更新!
【讨论】:
config.log_level = :debug
ActiveRecord::Base.verbose_query_logs = true 以查看触发每个查询的代码行
根据 Rails 5 文档 (Active Record Explain)。您现在可以使用说明方法。这只会记录您指定的查询,但如果您在测试前有大量 SQL 代码,您也不会感到不知所措。
ap Model.explain
【讨论】:
Model.explain 不记录查询——它执行数据库的 EXPLAIN 命令,该命令为您提供有关如何查询将运行的信息。诸如:它是否使用索引、查询需要检查多少行数据库等。