繁体   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