最有效的除錯策略是寫好測試。Rails 內建單元測試與功能測試框架,能及早發現錯誤、隔離問題範圍,並確保重構安全。養成「先寫測試,再寫實作」的習慣,是降低除錯成本的根本之道。
在專案根目錄執行 ruby script/console 進入 IRB 會話,載入完整 Rails 環境:
>> pr = Product.find(:first)
=> #<Product:0x4b969ec @attributes={...}>
>> pr.price
=> #<BigDecimal:4b913d4,'0.12351E3',8(12)>
>> pr.image_url
=> "https://www.dearbook.com.cn/book/BookImage/67/lastTS00168921__.jpg"
>> pr.save
=> true
可即時驗證模型邏輯、關聯查詢、資料庫操作,無需啟動伺服器。
log/development.log 記錄 SQL 查詢、參數、渲染資訊,是排查問題首選。log/test.log 記錄測試過程中的資料庫操作。log/production.log 僅記錄錯誤與關鍵資訊。遇到異常時,第一時間檢查對應環境的日誌。
使用 WEBrick 時,ruby script/server 會在終端機顯示即時請求日誌。InstantRails 預設用 Mongrel,無法在同一視窗查看,建議改用 tail -f log/development.log 監控。
logger.warn("I don't think that's a good idea")
logger.info("Dave's trying to do something bad")
logger.error("Now he's gone and broken it")
logger.fatal("I give up")
四個等級:debug < info < warn < error < fatal。環境設定決定寫入門檻(開發環境預設 debug,生產環境 info)。
在 .rhtml 模板中使用 debug() 格式化輸出物件內容:
<h3>Your Order</h3>
<%= debug(@order) %>
<div id="ordersummary">...</div>
自動判斷 HTML 安全性,適合快速檢視物件狀態。
breakpoint()。ruby script/breakpointer 啟動斷點伺服器。注意:InstantRails 的 Mongrel 不支援此功能,需切換至 WEBrick 或使用 ruby-debug gem 替代。