Из документации heroku в файловой системе только для чтения :
Для записи доступны две директории: ./tmp и ./log (в корневом каталоге вашего приложения). Если вы хотите временно удалить файл на время запроса, вы можете записать имя файла, например, # {RAILS_ROOT} / tmp / myfile _ # {Process.pid}. Нет никакой гарантии, что этот файл будет там при последующих запросах (хотя это может быть), поэтому его не следует использовать для любого вида постоянного хранилища.
Вы сможете довольно легко записать свои сгенерированные xml-файлы в tmp/
и отслеживать имена, загружать и записывать файлы s3 в один и тот же каталог и (возможно?) Вызывать команду zip до тех пор, пока вывод находится в tmp/
, затем отправьте файл в браузер с правильным типом MIME, чтобы запросить загрузку. Меня будет интересовать только размер файла и наличие у heroku недокументированного ограничения на то, что они разрешат в каталоге tmp. Тем более, что вы выполняете это действие только для одноразовой загрузки в течение одного запроса, я думаю, у вас есть хорошие шансы сделать это.
Редактировать: Оглядываясь немного, вы могли бы иметь возможность использовать что-то вроде RubyZip , чтобы создать свой zip-файл, если вы хотите избежать системных вызовов.