[英]rescue_from NoMethodError
我的設置:Rails 3.0.9,Ruby 1.9.2
我遇到了Heroku上的Rack 錯誤 ,該錯誤處理的是針對非文件字段發送的內容類型。 具體來說,我得到的錯誤是
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方法?
為了澄清起見,我無法控制調用rewind方法,這是在Rack本身中處理的,因此我無法使用try
或修復錯誤。
如果可能的話,我將嘗試修復該錯誤。 如果不是這樣,我認為Rails不會讓您從rescue_from
內重新引發異常,但是您可以改為調用默認的錯誤處理程序:
rescue_from NoMethodError do |exception|
if exception.name == :rewind
logger.debug "rewind error"
else
rescue_action_without_handler(exception)
end
end
我有同樣的問題,用python編寫的客戶端應用程序需要將文件以及其他幾個非文件參數上傳到Rails后端。 只有帶有文件對象的參數才能正常工作,但是Rails引發了NoMethodError (undefined method 'rewind' for <String#F3433>):
當python客戶端發送字符串參數時。 我通過jdelStrother應用此補丁解決了該問題。 它只需要評論以下內容:
# 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
在模塊Rack::Utils::Multipart
parse_multipart
方法中。 只需將補丁代碼添加到config / initializers目錄中的ruby文件中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.