在rails中打印和调试功能?

时间:2015-01-27 22:15:38

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4

在php中,可以在视图,控制器或模型中的任何位置使用print_r()。在rails中有类似的东西吗?我试着去查看并检查。它们似乎不会从模型中打印出来。是否只允许在视野中使用?如果没有模型或控制器中的任何示例?

3 个答案:

答案 0 :(得分:2)

这并不存在,因为它是最有效的调试方式。

能够将输出转储到浏览器取决于您所处的位置。它在视图中非常简单,在控制器中稍微有点麻烦,而且从模型中来说太难以值得。

幸运的是,除了简单地将内容转储到浏览器中之外,还有很多更好的工具。

您可以使用pry停止请求中途,打开REPL环境并以交互方式查询或修改正在运行的应用程序的状态。

如果您只想跟踪输出的执行流程,请使用记录器:

Rails.logger.info(my_object.inspect)

答案 1 :(得分:1)

通常,您会在模型,控制器或集成测试成为问题之前发现问题。在这种情况下,您可以使用puts输出您想要的任何代码,并且它将显示在您的测试输出中:

puts object.inspect

在Rails操作环境中,您可以使用Rails.logger

Rails.logger.debug(object.inspect)

这将显示在log/development.org,您可以在其中查看正在发生的事情。最好将其保留在debug级别,这样如果意外丢失,它不会使生产日志混乱。

答案 2 :(得分:0)

简短的回答是,你不能。至少不在一条线上。而且不仅因为这违反了MVC,还有一些阻止这种情况的实际原因。

没有可靠的方法以任意格式输出一堆数据并使其保持有效。在JSON视图中输出它可能很容易导致无效数据。因此,如果您的调试数据只能由浏览器处理,那么只应在浏览器的视图中指定该输出。即使没有其他存在,separate concerns

当然有替代品。 Rails 4.2.0附带web_console的应用模板。您开始使用它所需要的只是在某个地方的视图中添加对console的调用,例如应用程序的常规布局文件。如果这实际上是ERB,请在下面添加以下行:

<%= console %>

无论出现在何处,您都可以在当前渲染视图的上下文中使用REPL,您可以在其中轻松检查对象甚至执行更改数据的操作。

还有多种方法可以将数据输出到服务器的控制台或日志文件中。他们已被列入其他答案。我将在涉及记录器的解决方案中添加一些内容。

Rails Panel。这是Chrome扩展程序,为Chrome开发工具(显示在F12后面)添加了另一个标签,名为“Rails”。要使其正常工作,您需要在应用中添加meta_request gem(确保它在组development中!)。一旦工作,它将显示有关页面处理方式的大量数据:

  • 获取数据所花费的时间,呈现数据
  • 给定请求的参数
  • 执行数据库查询,持续时间和行已被
  • 触发
  • 查看涉及的文件
  • 此请求上发出的日志条目以及触发该条目的内容
  • 遇到错误

this Railscast中讨论了这个和其他一些调试事项。