我有一个Rails应用程序,我正在解析上传的CSV.我刚刚发现解析已停止工作并正在调查.
我已经将它追溯到我在Actiondispatch :: Http :: UploadedFile的实例上调用.read的事实,并返回一个空字符串.
上传的文件不为空,当我检查UploadedFile对象时,它有一个像@tempfile =#< File:/ tmp / RackMultipart20130530-34976-6jaqt5这样的属性.如果我在文件系统上捕获该文件,它包含我期望的内容. 为什么.read会返回一个空字符串? 我正在使用Rails 3.2.13.
解决方法
尝试倒带
我的同事建议在阅读之前调用倒带,这样可行.显然其他一些代码正在首先读取文件.
更新
据我所知,在我之前没有人在阅读文件.我创建了一个初始化程序来监视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
我没有看到任何其他的阅读电话.认为可能有一些其他方法被称为推进读指针,我进一步完全取代了类:
# 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
依然没有.我看到一个初始化的电话,我的倒带电话,以及我的阅读电话.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。