Ruby On Rails in UA/Разработка на ROR/Папку в архив.. как?!

04 июля 2009, 09:37   Папку в архив.. как?!
moff
moff
Живет: не указан
Сообщений: 7
Рейтинг: 0.0
Рег: 02 мая 2009

  •  
Если кто знает, то подскажите, пожалуйста..

На сервере есть папка, допустим /folder/
В этой папке много файлов.. Необходимо эту папку запаковать в архив средствами RoR.. Может кто знает как такое возможно сделать?! Может gem какой-то для этого есть..

Заранее спасибо..
04 июля 2009, 09:59   RE: Папку в архив.. как?!
killich
Илья aka Зайко
Живет: Россия, Иваново
Сообщений: 502
Рейтинг: 189.0
Рег: 27 окт. 2008
Его блог
  •  
5.0 из 1 гол.
moff http://rubyzip.sourceforge.net/
The following example opens zip archive my.zip (creating it if it doesn’t exist) and adds an entry first.txt and a directory entry a_dir to it.

  require 'zip/zip'

  Zip::ZipFile.open("my.zip", Zip::ZipFile::CREATE) {
   |zipfile|
    zipfile.get_output_stream("first.txt") { |f| f.puts "Hello from ZipFile" }
    zipfile.mkdir("a_dir")
  }

The next example reopens my.zip writes the contents of first.txt to standard out and deletes the entry from the archive.

  require 'zip/zip'

  Zip::ZipFile.open("my.zip", Zip::ZipFile::CREATE) {
    |zipfile|
    puts zipfile.read("first.txt")
    zipfile.remove("first.txt")
  }
может это? или просто в гугле -> ruby zip archive
Илья aka Зайко (aka Killich) Тот самый учитель информатики >:0) Зайко из-за того, что долго на аватаре стоял заяц Крош из Смешариков.
04 июля 2009, 10:43   RE: RE: Папку в архив.. как?!
moff
moff
Живет: не указан
Сообщений: 7
Рейтинг: 0.0
Рег: 02 мая 2009

  •  
Илья aka Зайко Спасибо, Илья.. ) Как раз то что нужно.. ^_^

Только вопрос: когда скрипт заканчивает работу - в папке рядом с архивом находятся еще какие-то файлы.. Очень странные.. Частично состоящие из названий файлов что я в архив упрятал + дата + что-то еще.. А внутри файлов - информация из заархивированных файлов..

Это можно как-то убрать?!
04 июля 2009, 10:51   RE: Папку в архив.. как?!
killich
Илья aka Зайко
Живет: Россия, Иваново
Сообщений: 502
Рейтинг: 189.0
Рег: 27 окт. 2008
Его блог
  •  
moff =) если б я хоть раз это использовал сам, я б обязательно ответил =)
Илья aka Зайко (aka Killich) Тот самый учитель информатики >:0) Зайко из-за того, что долго на аватаре стоял заяц Крош из Смешариков.
04 июля 2009, 10:52   RE: RE: Папку в архив.. как?!
moff
moff
Живет: не указан
Сообщений: 7
Рейтинг: 0.0
Рег: 02 мая 2009

  •  
Илья aka Зайко Ну ничего.. ) И на этом спасибо..
Удачи)
04 июля 2009, 15:20   RE: RE: RE: Папку в архив.. как?!
admin
Ruslan Voloshin
Живет: Odessa,UKR
Сообщений: 2458
Рейтинг: 616.0
Рег: 13 марта 2007
Его блог
  •  
5.0 из 1 гол.
moff Вот у меня реализован еще такой вариант
 def download_client
    client_type = params[:id]
    if client_type.eql?('php')
      file_name = "tmp/ziped_clients/#{current_user.uid}.zip"
      FileUtils.remove_file(file_name, true)
=begin
  Версия с созданием файла пхп архива.
=end
      file = Zip::ZipFile.open(file_name, Zip::ZipFile::CREATE) {
        |zipfile|
        zipfile.mkdir(current_user.uid.to_s)
        zipfile.add("#{current_user.uid}/client.php", "#{RAILS_ROOT}/crawler/client.php")
      }
=begin
  Версия с созданием пхп архива в через прямую запись в архив.
=end  
      #      Zip::ZipOutputStream::open("my.zip"){ |io|
      #        io.put_next_entry("#{current_user.uid}/client.php")
      #        File.open("#{RAILS_ROOT}/crawler/client.php"){|f|
      #          f.each{|line| io.write line}}
      #        io
      #      }
      send_file file_name, :size => file.size,  :filename => "#{current_user.uid}.zip"
    else
      render :text => 'Unknown client format!!!'
    end
    return
Операции с WM | SEO консультации
04 июля 2009, 22:41   RE: Папку в архив.. как?!
Yako
Denis Yakunkchikov
Живет: Togliatti
Сообщений: 7
Рейтинг: 5.0
Рег: 20 дек. 2008

  •  
moff Можно еще через ruby tar (видел где то в сети) а дальше через Zlib в tar.gz Про Zlib есть в Programming Ruby если вы забыли
14 июля 2009, 10:17   RE: RE: RE: RE: Папку в архив.. как?!
moff
moff
Живет: не указан
Сообщений: 7
Рейтинг: 0.0
Рег: 02 мая 2009

  •  
Ruslan Voloshin Спасибо.. ) Этот вариант очень помог мне сделать некоторые части что мне нужно.. Большое спасибо)