基本的には、メモリからtar/gz形式(おそらく複数のファイルがタールにストリームされますが、HARDDRIVEには触れないでストリーミングするだけです)にデータをストリームしたい場合は、私の場合はHTTPリクエスト本体)。ruby streaming tar/gz
これを行うことができる既存のライブラリを知っている人はいますか? Railsに何かありますか?
libarchive-rubyはCラッパーにすぎず、非常にプラットフォームに依存するようです(ドキュメントはインストール手順としてコンパイルしてほしいですか?)。
SOLUTION:
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のファイルをIOでスワップして、ストリーミングを維持することができます。 dw11wtqのクッキー!
これは実際にはメモリが集中していることを指摘する必要があります。これはgzipストリームに行く前にStringIOをtarでいっぱいにします。大きなファイルのより良い解決策は、ストリーム間にバッファを作成することです。これを実現するためにコードを追加します... –
gz.closeも出力IO(この場合File)を閉じることに注意してください。開いたままにするには、gz.finishを使用してください。 –