Какой лучший путь выбрать при загрузке изображений из моего приложения Rails в Amazon S3? - PullRequest
2 голосов
/ 12 октября 2010

У меня есть веб-приложение, в котором пользователи могут загружать аватары размером менее 700 КБ.Это единственная часть приложения, занимающаяся загрузкой изображений (поэтому я не буду иметь дело с исключительно большой нагрузкой).Мне было интересно, как лучше это сделать.В настоящее время я использую Paperclip и не хочу хранить все изображения на Amazon S3.

Опция 1 : пользователь загружает изображение на мой веб-сервер.Изображение обрабатывается асинхронно с использованием отложенного задания, а затем загружается на s3.Затем изображение удаляется с моего веб-сервера.

Вариант 2 : пользователь загружает изображение непосредственно на s3.Фоновый процесс на моем веб-сервере загружает изображение, обрабатывает его и загружает вновь созданные миниатюры в s3.

Вариант 1, похоже, использует меньшую пропускную способность в целом.Вариант 2, по-видимому, экономит моему приложению ресурсы для загрузки изображения непосредственно в него.

Я прав в этих предположениях?Какой вариант самый быстрый и самый дружественный к ресурсам?Или есть другой способ сделать это?

Кроме того, мне было интересно, могут ли такие сайты, как Twitter, FB и Posterous, обрабатывать изображения асинхронно.Всякий раз, когда я загружаю фотографию профиля в Twitter или изображения в FB и Posterous, они, похоже, обрабатываются мгновенно.

Спасибо!

Тим

Ответы [ 3 ]

2 голосов
/ 20 октября 2010

Лучше всего, чтобы пользователь загружал прямо на S3. Для этого хорошо работает плагин d2s3.

В обратном вызове d2s3 создайте событие delayed_job для загрузки полноразмерных изображений и сохранения их миниатюр в S3 с помощью Сокращенное резервное хранилище . Если вы подключите все правильно, вы можете автоматически создавать миниатюры, когда и если они когда-либо будут потеряны из S3.

1 голос
/ 12 октября 2010

Если под «обработкой изображения» вы имеете в виду создание миниатюр или другие параметры преобразования изображений, вы можете сделать это с помощью скрепки. Если обработка является огромной задачей, которую невозможно выполнить с помощью одной скрепки, я бы выбрал вариант 1, более дешевый, поскольку вы не получаете доступ к S3 несколько раз. Просто убедитесь, что у вас достаточно места на жестком диске для всех изображений во время обработки.

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

Если вы в конечном итоге идете по пути загрузки непосредственно на 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

...