首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rescue_from NoMethodError

rescue_from NoMethodError
EN

Stack Overflow用户
提问于 2011-08-04 05:33:32
回答 2查看 1.7K关注 0票数 1

我的设置: Rails 3.0.9,Ruby 1.9.2

我在Heroku上遇到了这个Rack bug,它处理为非文件字段发送的内容类型。具体来说,我得到的错误是

代码语言:javascript
复制
NoMethodError (undefined method `rewind' for "blah":String):

"blah“是我传递的url参数的值。我认为应该可以忽略这个错误,这样做

代码语言:javascript
复制
application_controller.rb

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

如何只检查NoMethodError倒带方法?或者也许有一种方法可以覆盖这个Rack方法?

只是为了澄清,我不能控制调用倒带方法,这是在Rack本身处理的,所以我不能使用try或修复错误。

EN

回答 2

Stack Overflow用户

发布于 2011-08-04 05:42:38

如果可能的话,我会去尝试修复这个错误。如果没有,我认为Rails不允许您从rescue_from中重新引发异常,但是您可以调用默认的错误处理程序:

代码语言:javascript
复制
rescue_from NoMethodError do |exception|
  if exception.name == :rewind
    logger.debug "rewind error" 
  else
    rescue_action_without_handler(exception)
  end
end
票数 3
EN

Stack Overflow用户

发布于 2011-09-03 23:33:33

我也遇到了同样的问题,一个用python编写的客户端应用程序需要将一个文件和其他几个非文件参数一起上传到Rails后端。只有带有文件对象的参数才能正常工作,但是当python客户端发送字符串参数时,Rails抛出了NoMethodError (undefined method 'rewind' for <String#F3433>):。我通过应用jdelStrother的this patch解决了这个问题。它只需要评论以下内容:

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

并将其替换为:

代码语言:javascript
复制
else
    data = body
end

在模块Rack::Utils::Multipart的方法parse_multipart中。只需在config/initializers目录下的ruby文件中添加补丁代码即可。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6933588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档