簡體   English   中英

rescue_from NoMethodError

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM