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
中!)。工作后,它将显示有关页面处理方式的大量数据:
- 获取数据、呈现数据所花费的时间
- 给定请求的参数
- 已执行的数据库查询、持续时间和它们触发的行数
- 查看涉及的文件
- 此请求发出的日志条目以及触发该请求的原因
- 遇到错误
中讨论了这个和其他一些调试内容
在 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
中!)。工作后,它将显示有关页面处理方式的大量数据:
- 获取数据、呈现数据所花费的时间
- 给定请求的参数
- 已执行的数据库查询、持续时间和它们触发的行数
- 查看涉及的文件
- 此请求发出的日志条目以及触发该请求的原因
- 遇到错误