繁体   English   中英

Rails中的打印和调试功能?

[英]print and debugging functions in rails?

在php中,可以在视图,控制器或模型中的任何位置使用print_r()。 铁轨上有类似的东西吗? 我尝试to_yaml并检查。 他们似乎并没有从模型中打印出来。 只能在视图中使用吗? 如果没有模型或控制器中的任何示例?

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

能否将输出转储到浏览器取决于您所在的位置。 它在视图中非常容易,在控制器中稍显笨拙,并且很难从模型中获得。

幸运的是,不是简单地倾倒的东西到浏览器更好的工具。

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

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

Rails.logger.info(my_object.inspect)

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

puts object.inspect

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

Rails.logger.debug(object.inspect)

这将显示在log/development.org ,您可以在其中查看发生的情况。 最好将其保留在debug级别,以免意外遗留生产日志。

简短的答案是,你不能。 至少没有一行。 不仅因为这违反了MVC,还有一些实际的原因可以阻止这种情况。

没有可靠的方法可以以任意格式输出一堆数据并保持其有效。 在JSON视图中输出它很容易导致无效数据。 因此,如果调试数据只能由浏览器处理,则只能在浏览器的视图中指定该输出。 即使没有其他问题也要分开关注

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

<%= console %>

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

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

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

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

这一项和其他一些调试工作将在此Railscast中讨论。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM