Carrierwave или Стрекоза - PullRequest
       17

Carrierwave или Стрекоза

28 голосов
/ 21 сентября 2010

Я искал инструменты для загрузки файлов с рельсов, и мне показалось, что наиболее привлекательными и интересными для меня были операторская волна и стрекоза.

Из-за того, что вы оглядываетесь по сторонам, кажется, что carrierwave выбрал более традиционный стиль, когда вы можете обработать файл при сохранении, тогда как dragonfly - это промежуточное ПО, поэтому он позволяет обрабатывать на лету.

Мне было интересно, есть ли у людей какие-либо ссылки на тест производительности или любой тест, который сравнивает их.

Кроме того, просто любопытно, что думают люди о том и другом, и что они предпочитают, и, конечно, почему они предпочитают это.

Ответы [ 4 ]

32 голосов
/ 10 января 2011

В зависимости от настроек.Как пишет Senthil, пока у вас есть кеш-прокси, все нормально с Dragonfly.

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

Вот как я обобщил при рассмотрении обоих изображений для проекта в Mongomapper:

Carrierwave:

  • Плюсы
    • Генерирует большие пальцы при загрузке (экономит процессорное время)
    • Может использовать файлы напрямую из статического / кэшированного документа
    • Не нуждается в каком-либо кэше-фронте1016 *
    • Поддерживает различные бэкэнды хранилища (S3, Cloudfiles, GridFS, обычные файлы), которые при необходимости можно легко расширить на новые типы хранилищ.
  • Минусы
    • Генерирует большие пальцыпри загрузке (сложно создать новые размеры)
    • Не поддерживает mongomapper
    • Использует пространство для хранения для каждого сгенерированного файла / большого пальца.Если вы используете обычное файловое хранилище, у вас могут закончиться inode!

Dragonfly:

  • Плюсы
    • Должно работать сmongomapper, поскольку он расширяет только ActiveModel
    • Генерирует большие пальцы на лету (проще создавать новые макеты / большие размеры)
    • Сохраняется только один файл!Экономит место:)
  • Минусы
    • Потребляет процессор при каждом запросе, если у вас нет кеш-прокси, rack :: cache или аналогичного.
    • Нет способа получить доступ к файлам в виде файлов, если это необходимо.

В итоге я использовал оба.

В будущем я хочу, чтобы несущая волна подавлялаСнова MongoMapper.После использования обоих в различных ситуациях я обнаружил, что функции в MongoMapper (ветвь rails3) всегда работают и их легко расширить с помощью плагинов.Не могу сказать то же самое для Mongoid, как сейчас, но это может измениться.

10 голосов
/ 26 декабря 2010

Я использую «Стрекозу» просто потому, что в «перевозчике» пропущена поддержка mongomapper, а скрепка не работает с mongomapper без некоторых хаков.

«Стрекоза» выполняет обработку на лету, т.е.использоваться за кеш-прокси, таким как Varnish, Squid или Rack :: Cache, так что, хотя первый запрос может занять некоторое время, последующие запросы должны быть очень быстрыми!

5 голосов
/ 21 июня 2015

Скрепка

Скрепка предназначена как простая библиотека вложений файлов для Active Record. Цель этого состояла в том, чтобы максимально упростить настройку и обрабатывать файлы так же, как и другие атрибуты. Это означает, что они не сохраняются в свои конечные местоположения на диске и не удаляются, если установлено значение nil, до вызова ActiveRecord::Base#save. Он управляет проверками, основанными на размере и присутствии, если требуется. При необходимости он может преобразовать назначенное изображение в миниатюры, а предварительные условия так же просты, как установка ImageMagick (что для большинства современных систем на основе Unix так же просто, как и установка правильных пакетов). Прикрепленные файлы сохраняются в файловой системе и на них ссылаются в браузере по понятной спецификации, которая имеет разумные и полезные значения по умолчанию.

Преимущества

  1. проверок, Paperclip представляет несколько валидаторов для проверки вашего вложения: AttachmentContentTypeValidator AttachmentPresenceValidator AttachmentSizeValidator
  2. Удаление вложения Установите для атрибута ноль и сохраните. @user.avatar = nil @user.save
  3. Скрепка лучше подходит для органической среды Rails, использующей activerecord, а не для всех других альтернатив. Paperclip намного проще в использовании для начинающих разработчиков рельсов, а также имеет расширенные возможности для продвинутых разработчиков.
  4. Огромный поклонник Paperclip, поскольку для него не требуется RMagick, его очень легко настроить для публикации на Amazon S3, а объявление в моделях (проверки и т. Д.) Обеспечивает чистоту.
  5. Что касается нескольких загрузок файлов и обратной связи о ходе работы, то оба варианта возможны как с Paperclip, так и с Attachment_fu, но для работы обоих типов обычно требуется смазка локтем с помощью iframes и Apache.

CarrierWave

Этот драгоценный камень обеспечивает простой и чрезвычайно гибкий способ загрузки файлов из приложений Ruby. Он хорошо работает с веб-приложениями на основе Rack, такими как Ruby on Rails.

Преимущества

  1. Простая модель интеграции сущностей. Добавление единственного строкового атрибута image для ссылки на загруженное изображение.
  2. Методы "Волшебной" модели для загрузки и удаленного извлечения изображений.
  3. Интеграция загрузки HTML-файлов с использованием стандартного тега файла и другого скрытого тега для поддержки уже загруженной «кэшированной» версии.
  4. Простой интерфейс для создания версий производных изображений с различными размерами и форматами. Инструменты обработки изображений красиво спрятаны за кулисами.
  5. Методы модели для получения общедоступных URL-адресов изображений и их измененных версий для встраивания HTML.
  6. если встроенное кэширование рельсов, Carrierwave будет работать лучше, так как файлы могут быть загружены без какой-либо обработки. Если вы не выполняете никакой обработки, это не имеет значения.
  7. Генерирует большие пальцы при загрузке (экономит процессорное время)
  8. Может использовать файлы напрямую из статического / кэшированного документа
  9. Не нуждается в кеше-фронте
  10. Поддерживает различные бэкэнды хранилища (S3, Cloudfiles, GridFS, обычные файлы), которые при необходимости можно легко расширить на новые типы хранилищ. Один из фактов, что это не загромождает ваши модели с конфигурацией. Вместо этого вы можете определить классы загрузчика. Это позволяет легко повторно использовать, расширять и т. Д. Конфигурацию загрузки.Больше всего нам понравилось то, что CarrierWave очень модульная. Вы можете легко переключать свой механизм хранения между локальной файловой системой, облачным сервисом AWS S3 и многим другим. Вы можете переключать модуль обработки изображений между RMagick, MiniMagick и другими инструментами. Вы также можете использовать локальную файловую систему в вашем dev env и переключиться на хранилище S3 в производственной системе. Carrierwave имеет хорошую поддержку для внешних объектов, таких как DataMapper, Mongoid, Sequel, и даже может использоваться с сторонними системами управления изображениями, такими как cloudinary. Решение кажется наиболее полным с охватом поддержки для чего угодно, но решение также намного сложнее (для меня по крайней мере), так как есть намного больше кода, который вам нужно обработать. Необходимо оценить модульный подход, который использует CarrierWave. Он не зависит от того, какой из популярных клиентов S3 вы используете, поддерживая как aws / s3, так и right_aws. Он также не зависит от ORM и не тесно связан с Active Record. Тесное соединение Paperclip вызвало у нас некоторое горе на работе.

Недостатки

  1. Вы не можете проверить размер файла. Есть статья в вики, которая объясняет, как это сделать, но она не работает.
  2. Проверка целостности не работает при использовании MiniMagick (очень удобно, если вы беспокоитесь об использовании ОЗУ). Вы можете загрузить поврежденный файл изображения, и CarrierWave сначала выдаст ошибку, но в следующий раз проглотит ее.
  3. Вы не можете удалить исходный файл. Вместо этого вы можете изменить его размер, сжать и т. Д. Есть статья в вики, объясняющая, как это сделать, но опять же она не работает.
  4. Это зависит от внешних библиотек, таких как RMagick или MiniMagick. Скрепка работает напрямую с командной строкой преобразования (ImageMagick). Так что, если у вас есть проблемы с Minimagick (у меня были), вы потеряете часы погружений в поисках Google. На момент написания этой статьи и RMagick, и Minimagick были заброшены (я связался с автором Minimagic, ответа нет).
  5. Требуются некоторые файлы конфигурации. Это рассматривается как преимущество, но мне не нравится иметь отдельные файлы конфигурации вокруг моего проекта только для одного драгоценного камня. Конфигурация в модели мне кажется более естественной. В любом случае, это вопрос личного вкуса.
  6. Если вы найдете ошибку и сообщите о ней, команда разработчиков действительно отсутствует и занята. Они скажут вам, чтобы исправить ошибки самостоятельно. Это похоже на личный проект, который улучшается в свободное время. Для меня это не относится к профессиональному проекту со сроками исполнения.
  7. Не поддерживает mongomapper
  8. Использует пространство памяти для каждого сгенерированного файла / большого пальца. Если вы используете обычное файловое хранилище, у вас может не хватить inode!

Dragonfly

  1. Впечатляющая вещь о Dragonfly, которая отличает его от большинства других плагинов для обработки изображений, заключается в том, что она позволяет изменять размеры на лету.
  2. Нет необходимости настраивать размер миниатюр или другие действия в отдельном файле, это экономит много времени и разочарований. Это делает возможным просмотр кода Rails, например image_tag @product.image.thumb('150x150#').
  3. Волшебство становится возможным благодаря кешированию. Вместо создания обработанной версии при загрузке и последующего связывания с отдельными версиями изображения плагин генерирует изображения по запросу. Несмотря на то, что это проблема для первой загрузки, вновь созданный образ кэшируется по http для всех последующих загрузок, по умолчанию используется Rack :: Cache, хотя доступны другие более надежные решения, если масштабирование станет проблемой.

Преимущества * * тысяча восемьдесят-один Буду ли я часто менять размер изображения? Пример: если вы хотите, чтобы ваши пользователи могли изменять размер своих картинок (или вам нужна гибкость по размеру по какой-то другой причине), или действительно быстрая разработка. Да: стрекоза №: Carrierwave или Paperclip Может без проблем использоваться с mongomapper Производительность должна быть хорошей, если вы используете кеширующий прокси Должен работать с mongomapper (расширяет только ActiveModel) Создает большие пальцы на лету (проще создавать новые макеты / большие размеры) Сохраняется только один файл!Экономит место Обработка выполняется на лету (предназначена для использования за кеш-прокси, таким как Varnish, Squid или Rack :: Cache, так что, хотя первый запрос может занять некоторое время, последующие запросы должны бытьсупер-быстрый) Недостатки

  1. Потребляет процессор при каждом запросе, если у вас нет кеш-прокси, rack::cache или аналогичного.
  2. Нет способа получить доступ к файлам в виде файлов, если это необходимо.

Ссылки

2 голосов
/ 21 июня 2015

Другие люди написали довольно хорошие резюме, я просто хотел бы сказать, что из нашего опыта установка Dragonfly нуждалась в дополнительном обслуживании, и из-за халатности некоторых разработчиков на этом пути мы также застряли с множеством изображений-сирот, которые осталисьпосле того, как оригинал был удален.Этого бы не случилось с ванильной несущей волной.PS Мы перешли на облачный сервис (и используем с ним carrierwave) и довольны им.

...