В основном я хочу передать данные из памяти в формат tar / gz (возможно, несколько файлов в tar, но он НИКОГДА НЕ ПРИКАСАЕТСЯ К HARDDRIVE, только потоковое!), А затем передавать их куда-то еще (тело HTTP-запроса в моемcase).
Кто-нибудь знает о существующей библиотеке, которая может это сделать?Есть ли что-то в Rails?
libarchive-ruby - это всего лишь оболочка C и кажется, что она будет сильно зависеть от платформы (документы хотят, чтобы вы компилировали ее как этап установки ?!).
РЕШЕНИЕ:
require 'zlib'
require 'rubygems/package'
tar = StringIO.new
Gem::Package::TarWriter.new(tar) { |writer|
writer.add_file("a_file.txt", 0644) { |f|
(1..1000).each { |i|
f.write("some text\n")
}
}
writer.add_file("another_file.txt", 0644) { |f|
f.write("some more text\n")
}
}
tar.seek(0)
gz = Zlib::GzipWriter.new(File.new('this_is_a_tar_gz.tar.gz', 'wb')) # Make sure you use 'wb' for binary write!
gz.write(tar.read)
tar.close
gz.close
Вот и все!Вы можете поменять файл в GzipWriter с любым вводом-выводом, чтобы обеспечить его потоковую передачу.Печенье для dw11wtq!