簡體   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