rails 中的打印和调试功能?

print and debugging functions in rails?

在 php 中,可以 print_r() 在视图、控制器或模型中的任何位置。 rails中有类似的东西吗?我尝试了 to_yaml 并进行了检查。他们似乎没有从模型中打印出东西。是否只允许在视图中使用?如果不是模型或控制器中的任何示例?

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

能否将输出转储到浏览器取决于您所在的位置。它在视图中非常简单,在控制器中稍微麻烦,而且在模型中太难了,不值得。

幸运的是,有很多比简单地将东西转储到浏览器更好的工具。

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

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

Rails.logger.info(my_object.inspect)

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

puts object.inspect

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

Rails.logger.debug(object.inspect)

这将显示在 log/development.org 中,您可以在其中查看正在发生的事情。最好将其保留在 debug 级别,这样如果不小心留下它就不会弄乱您的生产日志。

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

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

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

<%= console %>

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

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

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

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

this Railscast.

中讨论了这个和其他一些调试内容