Это читает исходный файл и записывает его по 1 Мб за раз в zipfile.
Я уже некоторое время использую что-то очень похожее в производстве.
require 'zip/zip'
Zip::ZipFile.open("mp.zip", Zip::ZipFile::CREATE) do |zipfile|
zipfile.get_output_stream("text.txt") do |out_file|
File.open("text.txt") do |in_file|
while blk = in_file.read(1024**2)
out_file << blk
end
end
end
end
Надеюсь, что это отвечает на ваш вопрос.