Rails 3 paperclip vs carrierwave против dragonfly vs attachment_fu - программирование
Подтвердить что ты не робот

Rails 3 paperclip vs carrierwave против dragonfly vs attachment_fu

Я работаю над обновлением приложения Rails 2.3.11, Ruby 1.9.2 до Rails 3.0.10, а attachment_fu больше не работает.

Я смотрю на переход на paperclip, carrierwave или dragonfly для загрузки файлов или, возможно, поддерживаемую версию Rails 3 поддерживаемой версии attachment_fu.

Какой из этих опций будет лучше всего использовать с точки зрения производительности, насколько он ухожен, насколько легко обновиться с attachment_fu, и, может быть, это будет совместимость с Rails 3.1? Каковы основные достоинства и недостатки каждого из них?

Любое понимание будет оценено.

4b9b3361

Ответ 1

Я использовал и Paperclip, и Carrierwave, и если бы я был вами, я бы пошел на Carrierwave. Это намного более гибко. Мне также нравится, что он не загромождает ваши модели с конфигурацией. Вместо этого вы можете определить классы загрузчика. Это позволяет вам легко повторно использовать, расширять и т.д. Конфигурацию загрузки.

Вы смотрели рельсовую передачу Carrierwave? http://railscasts.com/episodes/253-carrierwave-file-uploads

Paperclip - не плохой выбор, хотя это был "лучший" выбор в течение длительного времени. Но Carrierwave определенно похоже на новое поколение;)

Ответ 2

Я использовал CarrierWave, и после нескольких часов разочарования я перешел на Paperclip.

Вот проблемы, которые я видел с CarrierWave:

  • Вы не можете проверить размер файла. Существует статья wiki, в которой объясняется, как это сделать, но она не работает.
  • Проверки целостности не работают при использовании MiniMagick (очень удобно, если вас беспокоит использование ОЗУ). Вы можете загрузить поврежденный файл изображения, а CarrierWave сначала выдает ошибку, но в следующий раз проглотит его.
  • Вы не можете удалить исходный файл. Вы можете изменить его размер, сжать и т.д. Существует статья wiki, объясняющая, как это сделать, но опять же она не работает.
  • Это зависит от внешних библиотек, таких как RMagick или MiniMagick. Скрепка работает непосредственно с командной строкой convert (ImageMagick). Итак, если у вас есть проблемы с Minimagick (у меня было), вы потеряете часы погружения в поиске Google. И RMagick, и Minimagick оставлены на момент написания этой статьи (я связался с автором Minimagic, без ответа).
  • Ему нужны некоторые файлы конфигурации. Это рассматривается как преимущество, но мне не нравится иметь одиночные файлы конфигурации вокруг моего проекта только для одного драгоценного камня. Конфигурация в модели кажется мне более естественной. В любом случае, это вопрос личного вкуса.
  • Если вы обнаружите ошибку и сообщите об этом, команда разработчиков действительно отсутствует и занята. Они скажут вам, чтобы исправить ошибки самостоятельно. Это похоже на личный проект, который улучшается в свободное время. Для меня это не подходит для профессионального проекта с предельными сроками.

Ответ 3

Я бы спросил себя:

  • Часто ли меняю размер изображения? Пример: если вы хотите, чтобы ваши пользователи меняли размер своих изображений (или ваша гибкость по размеру по какой-либо другой причине), или действительно быстрая разработка.

Да: Стрекоза

Нет: либо Carrierwave, либо Paperclip

Ответ 4

(ссылка:
fooobar.com/info/106029/...)

Paper_Clip

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

Преимущество:

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

CarrierWave

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

Преимущество CarrierWave

Интеграция объектной модели 1.Simple. Добавление атрибута изображения одной строки для ссылки на загруженное изображение.
 2. "Магические" методы модели для загрузки и удаленной загрузки изображений.
 3.HTML-загрузка файлов с использованием стандартного тега файла и другого скрытого тега для поддержки уже загруженной "кешированной" версии.
 Интерфейс 4.Straight-forward для создания производных версий изображений с различными размерами и форматами. Инструменты обработки изображений красиво скрыты за кулисами.
 5.Model методы для получения общедоступных URL-адресов изображений и их измененных размеров для встраивания HTML.
 6.if встроенное кэширование рельсов, Carrierwave будет работать лучше, так как файлы могут быть загружены без какой-либо обработки. Если вы не делаете никакой обработки, это не имеет значения.
 7.Generates thumbs on upload (экономит время процессора)
 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. Тесное сцепление скрепки вызвало у нас некоторое горе на работе.

Недостаток CarrierWave

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

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

Преимущество:

1. Часто ли меняю размер изображения? Пример: если вы хотите, чтобы ваши пользователи меняли размер своих изображений (или ваша гибкость по размеру по какой-либо другой причине), или действительно быстрая разработка.
 2.Да: Стрекоза
 3. Нет: либо Carrierwave, либо Paperclip
 4. можно использовать его с mongomapper без каких-либо проблем, но Carrierwave отказались от поддержки моногового картографа.
 5. До тех пор, пока кеш-прокси впереди, это прекрасно со Стрекозой.
 6. Должна работать с mongomapper, поскольку она только расширяет ActiveModel
 7. Создает большие пальцы руки на лету (проще создать новые макеты/миниатюры)
 8. Только один файл хранится! Экономит место:)
 9.Dragonfly выполняет обработку "на лету", т.е. (Предполагается, что она используется за прокси-сервером, например, лаком, Squid или Rack:: Cache, так что, хотя первый запрос может занять некоторое время, последующие запросы должны быть супер-быстрыми!)

Недостаток:

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