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