2009-07-11 19 views
17

Quelle est la meilleure façon de créer une archive tar gzippée avec Ruby?Ruby: Créer une archive Tar gzippée

J'ai une application Rails qui doit créer une archive compressée en réponse aux actions de l'utilisateur. Idéalement, il serait possible d'écrire directement dans un fichier compressé sans avoir besoin de générer des fichiers temporaires intermédiaires en premier. La bibliothèque Ruby Zlib semble prendre en charge la compression gzip directe. Comment puis-je combiner cela avec la sortie de tar?

Un certain nombre de quasi-solutions semblent avoir été proposées et beaucoup d'informations semblent être périmées. Par exemple, le premier résultat de recherche Google pour "ruby tar" donne this thread, qui a été démarré en 2007 avec apparemment aucune résolution. Un autre résultat de recherche de haut rang est this one describing ruby tar. Cela remonte à 2002, et l'annonce n'inspire pas vraiment la confiance.

J'ai également vu divers rapports de décorticage à unix de goudron et similaires. Donc, je sais qu'il y a beaucoup de façons de le faire, mais je suis vraiment à la recherche d'une recommandation à la plus fiable et pratique de quelqu'un qui a essayé quelques-unes des solutions de rechange.

Des idées?

+0

Avez-vous trouvé une réponse? – hornairs

+0

Ceci est très similaire à ma question: http://stackoverflow.com/questions/7856491/ruby-streaming-tar-gz Quelqu'un trouve une réponse? –

+0

Je suis toujours en train de jouer avec ça, mais cela semblait être une bonne idée. Ruby's [Archive :: Tar] (http://www.ruby-doc.org/gems/docs/a/archive-tar-0.9.0/Archive/Tar.html) – Pred

Répondre

4

Ce projet Ruby Minitar a été mis à jour en 2009 et semble que cela résoudrait votre problème

+0

Minitar ne semble pas autoriser l'écriture de goudrons à partir d'un flux, uniquement à partir de fichiers. Il peut cependant sortir vers un flux. –

9

Si vous utilisez sous unix, vous pouvez écrire les fichiers sur le disque, puis exécutez un appel système à goudron/les gzip .

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

J'aime ça - très facile. Même s'il ne vérifie pas que "tar" est installé sur votre système, c'est une hypothèse raisonnable s'ils ont ruby ​​:) Ne pas oublier les "" backticks autour de lui. SO ne me laisserait pas ajouter d'espaces à l'avant pour qu'ils soient visibles. –