尝试倒带
我的同事建议rewind
之前打电话read
,这很管用。显然其他一些代码首先读取文件。
更新
据我所知,没有人在我之前阅读文件。我创建了一个初始化程序来监视UploadedFile
:
# config/initializers/uploaded_file.rb
class ActionDispatch::Http::UploadedFile
alias_method :old_read, :read
def read(*args)
Rails.logger.info "file #{self} is getting read by #{caller.first}!"
old_read(*args)
end
end
我没有看到任何其他对read
. 考虑到可能有一些其他方法可以推进读取指针,我更进一步并完全替换了该类:
# config/initializers/uploaded_file.rb
ActionDispatch::Http::UploadedFile = Class.new do
def initialize(*args)
Rails.logger.info "initilized with #{args}"
end
def method_missing(method_name, *args, &block)
Rails.logger.info "file got #{method_name} with #{args}.\
Block? #{block_given?} caller? #{caller.first}"
end
end
依然没有。我看到一个电话initialize
,我的电话rewind
,和我的电话read
。
似乎这个文件是预先缠绕到最后的。我不确定为什么会这样,但rewind
对我来说仍然是解决方法。