2009-07-11 2 views
17

Каков наилучший способ создания gzipped tar-архива с Ruby?Ruby: Создать Gzipped Tar Архив

У меня есть приложение Rails, которому необходимо создать сжатый архив в ответ на действия пользователя. В идеальном случае можно было бы напрямую писать в сжатый файл без необходимости генерировать промежуточные временные файлы. Библиотека Ruby Zlib, как представляется, поддерживает прямое сжатие gzip. Как я могу объединить это с выводом tar?

Предлагается ряд квазирешений, и многие данные выглядят устаревшими.

Например, в результатах поиска Google для «ruby tar» указан this thread, который был запущен в 2007 году с разрешением, по-видимому, без разрешения.

Другим важным результатом поиска является this one describing ruby tar. Это датируется 2002 годом, и это объявление не внушает доверия.

Я также видел различные сообщения об обстреле unix tar и тому подобное.

Итак, я знаю, что есть много способов сделать это, но я действительно ищу рекомендации для самых надежных и удобных от тех, кто попробовал несколько альтернатив.

Любые идеи?

+0

Вы нашли ответ? – hornairs

+0

Это очень похоже на мой вопрос: http://stackoverflow.com/questions/7856491/ruby-streaming-tar-gz Кто-нибудь найдет ответ? –

+0

Я все еще играю с этим, но это выглядело неплохо. Ruby's [Архив :: Tar] (http://www.ruby-doc.org/gems/docs/a/archive-tar-0.9.0/Archive/Tar.html) – Pred

ответ

4

Этот Ruby Minitar проект был обновлен в 2009 году, и кажется, что это позволит решить проблему

+0

Minitar, похоже, не позволяет писать торы из потока, только из файлов. Однако он может выводить на поток. –

9

Если вы работаете под Unix, вы можете записать файлы на диск, а затем запустить системный вызов дегтя/GZIP их ,

`tar -czf #{file_name}.tar.gz #{file_name}` 
+0

Мне это нравится - очень легко. Несмотря на то, что он не проверяет, что в вашей системе установлен «tar», разумное предположение, если у них есть рубин :) Не забывайте об обратном направлении «вокруг». SO не позволил бы мне добавить пробелы впереди, чтобы они были видны. –