次のコードを再利用して tar ボールを作成しようとしています。
tarfile = File.open("#{Pathname.new(path).realpath.to_s}.tar","w")
Gem::Package::TarWriter.new(tarfile) do |tar|
Dir[File.join(path, "**/*")].each do |file|
mode = File.stat(file).mode
relative_file = file.sub /^#{Regexp::escape path}\/?/, ''
if File.directory?(file)
tar.mkdir relative_file, mode
else
tar.add_file relative_file, mode do |tf|
File.open(file, "rb") { |f| tf.write f.read }
end
end
end
end
tarfile.rewind
tarfile
小さなフォルダーのみが含まれる限り問題なく動作しますが、大きなフォルダーは次のエラーで失敗します。
Error: Your application used more memory than the safety cap
メモリの問題を回避するためにチャンクで行うにはどうすればよいですか?