Mananging загрузки изображений для создания пользовательских PDF-файлов на Heroku - правильные инструменты - PullRequest
2 голосов
/ 01 сентября 2010

Я создаю приложение, которое позволяет пользователям загружать изображения (максимум 500 тыс. На изображение, примерно 20 изображений) со своего жесткого диска на сайт, чтобы иметь возможность создавать собственные настольные игры (например, змеи и лестницы) в формате PDF. Они будут созданы с креветками мгновенно, а затем доступны для мгновенной загрузки.

Ни загруженные изображения, ни созданные PDF-файлы не нужно постоянно сохранять на стороне моих приложений. В тот момент, когда пользователь загружает pdf, он больше не нужен.

Heroku не поддерживает сохранение файлов в систему (он разрешает в каталог tmp, но говорит, что вы не должны полагаться на то, что он вычеркнул его для меня). Мне интересно, какие инструменты / услуги я должен изучить, чтобы обойти это. Я заглянул в скрепку, мне интересно, подходит ли это для такой работы.

Ответы [ 2 ]

1 голос
/ 04 сентября 2010

Скрепка находится на правильном пути, но ключевая идея заключается в том, что вам нужно использовать серверную часть хранилища 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, но они должны быть тривиальными.

1 голос
/ 04 сентября 2010

Paperclip звучит как идеальный кандидат. Это сохранит изображения в RAILS_ROOT/public/system/, который является как постоянным, так и приватным (не может быть перечислен на виртуальном хостинге).

Вы можете настроить его на создание миниатюр ваших изображений, если хотите.

И он может удалять изображения, которыми он управляет, когда уничтожается связанная модель - после того, как ваш пользователь загрузит их PDF, и вы удалите запись из базы данных.

Prawn может быть неуместным, в зависимости от сложности PDF-файлов, которые необходимо сгенерировать. Если у вас есть $$$, выберите PrinceXML и камень princely. У меня был некоторый успех с wkhtmltopdf, который генерирует PDF-файлы из Webkit рендера HTML / CSS - но он не поддерживает какие-либо дополнительные средства манипулирования страницами, которые Prince делает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...