NoMemoryError:解压缩大型XML(.gz)文件时的负重新分配大小

时间:2015-11-18 06:43:33

标签: ruby-on-rails ruby zlib

在我的Rails应用程序中,我想对从FTP服务器下载的一组XML文件进行gunzip。

每个XML文件都与商家相关联,并且包含产品详细信息。我正在尝试使用GzipReader解压缩每个文件,然后想要使用Nokogiri::XML::SAX::Document解析它。

“gz”文件的大小可变,我能够解压缩大小约为140 MB的文件,但是当文件较大(~428 MB)时,应用程序会抛出此错误:

cj_unzipping.rb:10:in `read': negative re-allocation size (NoMemoryError)
from cj_unzipping.rb:10:in `block in <main>'

我看了“Why do I get a Nokogiri crash and MemoryError: negative re-allocation size?”,但我的磁盘上还有很多空间。

require 'rubygems'
require 'zlib'

Zlib::GzipReader.open("/home/elmiya/project/mywebapp/cj1.xml.gz") { |gz|
  g = File.new("/home/elmiya/project/mywebapp/cj1.xml", "w")
  g.write(gz.read)
  g.close()
}

gz.read行会产生问题。

我正在跑步:

Rails version: 4.0.2
Ruby version: 2.0.0p643

有人可以帮我解决这个问题吗?

0 个答案:

没有答案