[英]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.