2011-08-03 36 views
1

我的設置:Rails的3.0.9,1.9.2紅寶石rescue_from NoMethodError

我就遇到了這個機架bug在Heroku與內容類型處理非文件字段被髮送。具體來說,我得到的錯誤是

NoMethodError (undefined method `rewind' for "blah":String): 

「等等」是我傳遞的url參數的值。我認爲應該可以忽略這個錯誤做這樣的事情

application_controller.rb 

    rescue_from NoMethodError do |exception| 
    logger.debug "\n\n==============Rack rewind error=======================\n\n" 
    end 

我該如何檢查NoMethodError倒帶方法?或者也許有一種方法可以覆蓋這種Rack方法?

爲了澄清,我無法控制調用倒回方法,這是在Rack本身處理的,所以我不能使用try或修復錯誤。

回答

3

我會去嘗試修復那個錯誤,如果可能的話。如果沒有,我不認爲Rails的讓來自rescue_from在你重新拋出異常,但你可以調用默認的錯誤處理程序來代替:

rescue_from NoMethodError do |exception| 
    if exception.name == :rewind 
    logger.debug "rewind error" 
    else 
    rescue_action_without_handler(exception) 
    end 
end 
+0

我無法修復這個錯誤,這在Rack本身很深。我嘗試按照application_controller.rb中的建議添加錯誤處理程序,但它從未觸發過,可能Rack沒有提出錯誤? – Bob

0

我有同樣的問題,用Python編寫的一個客戶端應用程序需要將文件和其他非文件參數一起上傳到Rails後端。只有帶有文件對象的參數工作正常,但當Python客戶端發送字符串參數時,Rails引發了NoMethodError (undefined method 'rewind' for <String#F3433>):。我通過應用jdelStrother的this patch來解決它。它只是需要進行以下評論:

# elsif !filename && content_type 
# body.rewind 
# 
# # Generic multipart cases, not coming from a form 
# data = {:type => content_type, 
#   :name => name, :tempfile => body, :head => head} 

,並替換它們:

else 
    data = body 
end 

的方法parse_multipart模塊Rack::Utils::Multipart。只需在config/initializers目錄中的一個ruby文件中添加補丁代碼即可。