Загрузка и распаковка файлов на S3 через Rails, размещенный на Heroku? - PullRequest
5 голосов
/ 09 августа 2010

Я бы хотел иметь возможность загрузить zip-файл в мое приложение Rails, которое содержит несколько изображений. Затем я бы хотел, чтобы Rails распаковал этот файл и вложил изображения внутри модели моей фотографии с помощью Paperclip , чтобы они в конечном итоге были сохранены в моей учетной записи Amazon S3 (настроенной с помощью Paperclip).

Я бы хотел сделать все это на моем сайте Rails, размещенном на Heroku , который, к сожалению, не позволяет локальному хранилищу какого-либо вида (насколько я знаю) временно выполнять распаковку. до разбора скрепки.

Как бы я это сделал ??

Ответы [ 3 ]

5 голосов
/ 27 мая 2011

Я бы порекомендовал загрузить напрямую в S3, который полностью обходит Heroku, чтобы вы не ограничивались 30-секундным тайм-аутом запроса (который отбрасывает ваши загрузки после истечения этого времени) или лимитом каталога в 1 ГБ /tmp. После того, как файл загружен, вы можете сделать POST для вашего приложения на Rails с именем и расположением файла, а затем выполнить операцию разархивирования. Если вы хотите использовать Paperclip для постобработки, я прикрепил ссылку ниже. Если вы в конечном итоге идете по пути загрузки непосредственно на S3, который выгружает работу с вашего сервера Rails, пожалуйста, ознакомьтесь с моими примерами проектов:

Пример проекта с использованием Rails 3, Flash и FancyUploader на основе MooTools для загрузки непосредственно в S3: https://github.com/iwasrobbed/Rails3-S3-Uploader-FancyUploader

Пример проекта с использованием Rails 3, Flash / Silverlight / GoogleGears / BrowserPlus и Pluquload на основе jQuery для загрузки непосредственно в S3: https://github.com/iwasrobbed/Rails3-S3-Uploader-Plupload

Вот ссылка для постобработки Paperclip для примера, подобного изображениям:

http://www.railstoolkit.com/posts/fancyupload-amazon-s3-uploader-with-paperclip

3 голосов
/ 09 августа 2010

dmagkic верен в отношении rails_root / tmp.Я рекомендую что-то вроде следующего:

  • Загрузка файлов через heroku на S3
  • Настройка фонового задания для архивирования файлов (сохраните имена файлов, которые нужно сгруппировать)
  • запустить BJ, который загружает файлы с S3, архивирует их, отправляет zip на S3, удаляет разархивированные файлы.

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

Если вы попытаетесь загрузить несколько файлов, вы МОЖЕТЕ записать в / tmp, но просто убедитесь, что все файлы встречаются в одном и том же пост-запросе.

1 голос
/ 09 августа 2010

Heroku позволяет писать на #{RAILS_ROOT}/tmp.

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

Звучит так, будто вам нужен флэш-загрузчик, который может разархивировать и отправить на S3 без Heroku.

...