Скрепка находится на правильном пути, но ключевая идея заключается в том, что вам нужно использовать серверную часть хранилища S3 (Paperclip использует FS по умолчанию, что, как вы заметили, не подходит для Heroku).Это довольно удобно;вместо того, чтобы сбрасывать записи в файловую систему, он использует гем AWS :: S3 для загрузки их в S3.Вы можете узнать больше об этом в rdoc здесь: http://github.com/thoughtbot/paperclip/blob/master/lib/paperclip/storage/s3.rb
Вот как будет работать поток:
Я бы позволил вашим пользователям загружать свои изображения из нескольких источников.Вот статья о разрешении нескольких вложений для одной модели с помощью скрепки: http://www.cordinc.com/blog/2009/04/multiple-attachments-with-vali.html.
Затем, когда вы будете готовы сгенерировать PDF (вероятно, в фоновом режиме, верно?), Вам нужно скачать всеИсходные изображения находятся где-то в tmp / (убедитесь, что каталог основан на идентификаторе вашей модели или что-то в этом роде, поэтому, если два человека делают это одновременно, на файлы не наступают).Как только вы загрузите все изображения, вы можете создать свой PDF.Я знаю, что это использует файловую систему, но до тех пор, пока вы выполняете все взаимодействия с файловой системой в одном запросе или цикле заданий, это будет работать, ваши файлы все еще будут там.Я использую этот метод в паре производственных веб-приложений.Вы не можете рассчитывать на то, что tmp / находится там между запросами, но в пределах одного он надежно существует.
Сохранение сгенерированного PDF на S3 с помощью paperclip также имеет смысл, так как тогда вы можете просто передать своим пользователям URL S3.Если вы хотите, вы можете сделать что-нибудь, чтобы очистить файлы время от времени, если вы не хотите оплачивать расходы S3, но они должны быть тривиальными.