Руби почтовый поток - PullRequest
       16

Руби почтовый поток

7 голосов
/ 15 июля 2011

Я пытаюсь написать сценарий ruby ​​fcgi, который на лету сжимает файлы в каталоге и отправляет выходные данные в виде ответа http. Очень важно, чтобы это сжатие выполнялось как потоковая операция, иначе клиент получит таймаут для огромных каталогов.

У меня есть следующий код:

d="/tmp/delivery/"

# send zip header
header(MimeTypes::ZIP)

# pseudocode from here on
IO.open(d) { |fh|
    block=fh.readblock(1024)
    #send zipped block as http response
    print zip_it(block)
}

Как мне добиться того, что я написал как псевдо-рубин в приведенном выше листинге?

Ответы [ 3 ]

1 голос
/ 02 августа 2011

AFAYK Формат Zip не растирается, в конце сжатия он записывает что-то в заголовок файла.

gz или tar.gz - лучший вариант.

1 голос
/ 26 июля 2011

Идея Tokland об использовании внешней команды zip работает довольно хорошо.Вот небольшой фрагмент кода, который должен работать с Ruby 1.9 в Linux или подобных средах.Он использует параметр массива для popen(), чтобы избежать проблем с цитированием оболочки, и sysread / syswrite, чтобы избежать буферизации.Вы можете отобразить сообщение о состоянии в пустом блоке rescue, если хотите, или можете использовать read и write, хотя я не проверял их.

0 голосов
/ 13 июня 2012
...