2011-02-18 60 views
1

我得到這個錯誤,Paperclip寶石。如何調試寶石中的錯誤?

NoMethodError (You have a nil object when you didn't expect it! 
You might have expected an instance of Array. 
The error occurred while evaluating nil.size): 
    paperclip (2.3.8) lib/paperclip/attachment.rb:104:in `assign' 

我該如何進行調試,看起來好像是在寶石中一樣?如果這是我的代碼,我會放幾個puts看看發生了什麼,但我不能這樣做。我正在使用Rails 3.0.1

+1

問題可能是因爲你通過零回形針。你是否檢查過堆棧跟蹤,你可以在這裏發佈? – 2011-02-18 13:38:49

回答

3

這是我的最佳拍攝。

  • 您的控制器打開一個和debugger行添加到它。我們需要調試器來踢設置斷點
  • 下一頁run rails --debug
  • 導航到具有斷點
  • 調試器控制檯會出現在頁面/控制器。
  • 運行Gem.find_files("attachment.rb") < - 我會打電話給$ GEM_ROOT到這個返回
  • 運行list $GEM_ROOT/lib/paperclip/attachment.rb:104路徑 - 這會顯示周圍發生錯誤的區域代碼。
  • 運行b $GEM_ROOT/lib/paperclip/attachment.rb:$LINE - 將$ LINE替換爲斷點的合適候選者。
  • 運行cont
  • 命中導致錯誤的頁面/操作,並且調試控制檯應該在中斷點打開。

我認爲必須有一種方式來獲得的路徑以編程寶石文件,但我不知道該怎麼做:(

0

接受的答案工作,但它就是這麼簡單將寶石源和插入debugger命令,你想打破。

要小心是否達到您的插入debugger命令時,導軌提供你正在嘗試請求。與控制器,您可能無法進入控制器馬上有時會出現濾波器或幫助器方法,使控制器快速返回並返回他以devise gembefore_filter :authenticate_user!爲例。

如果使用捆綁,和我們大多數人目前做的,從你的項目的根目錄下發bundle show paperclip命令將告訴你在哪裏找到的paperclip寶石的源代碼。

此外,您需要在插入debugger語句後重新啓動服務器。