2013-12-20 5 views
1

Так что мне нужно будет загружать большие файлы (zip-файлы размером несколько ГБ) на S3, и я бы хотел, чтобы Carrierwave управлял загрузкой/распространением этих файлов.Загрузка больших файлов с Carrierwave на S3

Значение, когда пользователь платит Carrierwave, может автоматически генерировать динамический URL-адрес и отправлять его им. Я знаю, как это сделать уже, но мне просто пришло в голову, что я никогда не загружал файлы через Carrierwave, которые больше, чем несколько десятков МБ, а тем более от нескольких ГБ до S3.

Учитывая хладнокровие HTTP-соединений, я считаю, что это неоптимальный способ сделать это.

У меня не так много файлов для загрузки (возможно, 10-20 макс.), И пользователи не будут их загружать. Это будет магазин, где клиенты будут покупать/скачивать файлы, а не загружать их.

Было бы неплохо, если бы у меня был способ загрузить файлы в мой ведро S3 отдельно (скажем, FTP, git или какой-либо другой механизм), а затем просто привязать его к моему приложению через Carrierwave.

Каков наилучший способ приблизиться к этому?

ответ

3

Кроме того, не забудьте, что вы столкнетесь с 30-секундным тайм-аутом Heroku, когда вы загружаете файл в первую очередь.

Не волнуйтесь, есть варианты:

  • Прямая загрузка - S3 поддерживает прямую загрузку, где Вы представляете форму, которая будет загружать непосредственно s3 минуя Heroku, вы затем принять вызов обратно в приложение с детали загруженных файлов для вас (https://github.com/dwilkie/carrierwave_direct)
  • Загрузите на S3, а затем выложите в приложение приложение bucket/folder для подключения к вашим моделям. Мы делаем такой подход с рядом клиентов. Они используют Transmit (Mac Client) для загрузки больших активов на S3, а затем для их подключения, чтобы связать актив с моделью Rails.

Кроме того, я уверен, что S3 - это служба на основе HTTP, поэтому вы можете загружать только через HTTP.

+0

Я думаю, что мне нравится ваш второй вариант. то есть использовать Transmit и затем посетить приложение, чтобы связать актив с моделью Rails. Как мне это сделать, со стороны приложения? Как выглядит код? Или вы можете указать мне что-то в документах Carrierwave, которые показывают мне, как это сделать? – marcamillion

Смежные вопросы