我的设置: Rails 3.0.9,Ruby 1.9.2
我在Heroku上遇到了这个Rack bug,它处理为非文件字段发送的内容类型。具体来说,我得到的错误是
NoMethodError (undefined method `rewind' for "blah":String):"blah“是我传递的url参数的值。我认为应该可以忽略这个错误,这样做
application_controller.rb
rescue_from NoMethodError do |exception|
logger.debug "\n\n==============Rack rewind error=======================\n\n"
end如何只检查NoMethodError倒带方法?或者也许有一种方法可以覆盖这个Rack方法?
只是为了澄清,我不能控制调用倒带方法,这是在Rack本身处理的,所以我不能使用try或修复错误。
发布于 2011-08-04 05:42:38
如果可能的话,我会去尝试修复这个错误。如果没有,我认为Rails不允许您从rescue_from中重新引发异常,但是您可以调用默认的错误处理程序:
rescue_from NoMethodError do |exception|
if exception.name == :rewind
logger.debug "rewind error"
else
rescue_action_without_handler(exception)
end
end发布于 2011-09-03 23:33:33
我也遇到了同样的问题,一个用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在模块Rack::Utils::Multipart的方法parse_multipart中。只需在config/initializers目录下的ruby文件中添加补丁代码即可。
https://stackoverflow.com/questions/6933588
复制相似问题