28

私は Rails ファイル アップロード ツールを調査してきましたが、最も魅力的で興味深いと思われるツールは、carrierwave と Dragonfly でした。

周りを見渡すと、Carrierwave は保存時にファイルを処理できる従来のスタイルを採用しているように見えますが、トンボはミドルウェアであるため、その場で処理できます。

人々がパフォーマンステストまたは2つを比較するテストへの言及を持っているかどうか疑問に思っていました.

また、人々が両方についてどのような意見を持っているのか、どちらを好むのか、そしてもちろん、なぜそれを好むのかについても興味があります.

4

4 に答える 4

33

設定次第。Senthil が書いているように、前にキャッシュ プロキシがある限り、Dragonfly で問題ありません。

ただし、組み込みの Rails キャッシングを使用している場合は、ファイルを処理せずにロードできるため、Carrierwave のパフォーマンスが向上します。加工しなくても問題ありません。

Mongomapper を使用したプロジェクトで画像の両方を検討したときの要約を次に示します。

搬送波:

  • 長所
    • アップロード時にサムを生成します (CPU 時間を節約します)
    • 静的/キャッシュされたドキュメントから直接ファイルを使用できます
    • キャッシュフロントは必要ありません
    • さまざまなストレージ バックエンド (S3、Cloudfiles、GridFS、通常のファイル) をサポートし、必要に応じて新しいストレージ タイプに簡単に拡張できます。
  • 短所
    • アップロード時にサムを生成します (新しいサムサイズを生成するのは困難です)
    • mongomapper をネイティブにサポートしていない
    • 生成されたすべてのファイル/サムネイルにストレージ スペースを使用します。通常のファイル ストレージを使用すると、inode が不足する可能性があります。

トンボ:

  • 長所
    • ActiveModel のみを拡張するため、mongomapper と連携する必要があります。
    • その場でサムを生成します (新しいレイアウト/サムサイズを簡単に作成できます)
    • 保存できるファイルは 1 つだけです。スペースを節約します:)
  • 短所
    • キャッシュ プロキシ、rack::cache などがない場合、リクエストごとに CPU を消費します。
    • 必要に応じてサムをファイルとしてアクセスする方法はありません。

結局両方使ってしまいました。

将来的には、carrierwave が再び MongoMapper をサポートすることが望まれます。さまざまな状況で両方を使用した後、MongoMapper (rails3 ブランチ) の機能は常に機能し、プラグインを使用して簡単に拡張できることがわかりました。今のところ、Mongoid について同じことは言えませんが、変わるかもしれません。

于 2011-01-10T10:35:07.010 に答える
10

私がトンボを使っているのは、単にキャリアウェーブが mongomapper のサポートをやめたからです。

Dragonfly はオンザフライで処理を行います。

Varnish、Squid、Rack::Cache などのキャッシュ プロキシの背後で使用することを意図しているため、最初のリクエストには時間がかかる場合がありますが、後続のリクエストは非常に高速です。

于 2010-12-26T18:06:22.743 に答える
5

ペーパークリップ

Paperclip は、Active Record の簡単なファイル添付ライブラリとして意図されています。その背後にある意図は、セットアップをできるだけ簡単に保ち、ファイルをできるだけ他の属性と同じように扱うことでした。ActiveRecord::Base#saveこれは、が呼び出されるまで、ディスク上の最終的な場所に保存されず、nil に設定されている場合は削除されないことを意味します。必要に応じて、サイズと存在に基づいて検証を管理します。必要に応じて、割り当てられた画像をサムネイルに変換できます。前提条件は、ImageMagick をインストールするのと同じくらい簡単です (ほとんどの最新の Unix ベースのシステムでは、適切なパッケージをインストールするのと同じくらい簡単です)。添付ファイルはファイルシステムに保存され、わかりやすい仕様によってブラウザで参照されます。

利点

  1. 検証、Paperclip は、添付ファイルを検証するためのいくつかのバリデーターを導入します。
  2. 添付ファイルの削除 属性を nil に設定して保存します。 @user.avatar = nil @user.save
  3. Paperclip は、他のすべての代替手段ではなく、activerecord を使用する有機的な Rails 環境に適しています。Paperclip は、初心者の Rails 開発者にとってはるかに扱いやすく、上級開発者向けの高度な機能も備えています。
  4. RMagick を必要としないため、Paperclip の大ファンです。Amazon S3 に投稿するように設定するのは非常に簡単で、モデル内のすべて (検証など) を宣言することで、物事をきれいに保つことができます。
  5. 複数のファイルのアップロードと進行状況のフィードバックに関しては、どちらも Paperclip と Attachment_fu の両方で可能ですが、どちらも通常、iframe と Apache を使用して機能させるには多少の手間がかかります。

キャリアウェーブ

この gem は、Ruby アプリケーションからファイルをアップロードするためのシンプルで非常に柔軟な方法を提供します。Ruby on Rails などの Rack ベースの Web アプリケーションでうまく機能します。

利点

  1. シンプルなモデル エンティティの統合。imageアップロードされた画像を参照するための単一の文字列属性を追加します。
  2. 画像をアップロードしてリモートで取得するための「マジック」モデル メソッド。
  3. 標準のファイル タグと、アップロード済みの「キャッシュされた」バージョンを維持するための別の隠しタグを使用した HTML ファイル アップロードの統合。
  4. さまざまなサイズと形式の派生イメージ バージョンを作成するための簡単なインターフェイス。画像処理ツールは、うまく裏に隠されています。
  5. 画像のパブリック URL と、HTML 埋め込み用にサイズ変更されたバージョンを取得するためのモデル メソッド。
  6. Rails キャッシングが組み込まれている場合、ファイルは処理なしでロードできるため、Carrierwave のパフォーマンスが向上します。加工しなくても問題ありません。
  7. アップロード時にサムを生成します (CPU 時間を節約します)
  8. 静的/キャッシュされたドキュメントから直接ファイルを使用できます
  9. キャッシュフロントは必要ありません
  10. さまざまなストレージ バックエンド (S3、Cloudfiles、GridFS、通常のファイル) をサポートし、必要に応じて新しいストレージ タイプに簡単に拡張できます。モデルを構成で混乱させないという事実の1つ。代わりに、アップローダ クラスを定義できます。アップロード構成を簡単に再利用、拡張することができます。私たちが最も気に入ったのは、CarrierWave が非常にモジュール化されているという事実です。ローカル ファイル システム、クラウドベースの AWS S3 などの間でストレージ エンジンを簡単に切り替えることができます。RMagick、MiniMagick、その他のツール間で画像処理モジュールを切り替えることができます。開発環境でローカル ファイル システムを使用し、本番システムで S3 ストレージに切り替えることもできます。Carrierwave は、DataMapper、Mongoid、Sequel は、cloudinary などのサードパーティのイメージ管理でも使用できます。このソリューションは、ほぼすべてのサポート カバレッジで最も完全に見えますが、必要なコードがさらに多くあるため、ソリューションは (少なくとも私にとっては) はるかに厄介です。処理する。CarrierWave のモジュラー アプローチを評価する必要があります。aws/s3 と right_aws の両方をサポートし、どの一般的な S3 クライアントを使用しているかにとらわれません。また、ORM に依存せず、Active Record と密接に結合していません。Paperclip の緊密な結合は、仕事でいくらかの悲しみを引き起こしました。aws/s3 と right_aws の両方をサポートします。また、ORM に依存せず、Active Record と密接に結合していません。Paperclip の緊密な結合は、仕事でいくらかの悲しみを引き起こしました。aws/s3 と right_aws の両方をサポートします。また、ORM に依存せず、Active Record と密接に結合していません。Paperclip の緊密な結合は、仕事でいくらかの悲しみを引き起こしました。

短所

  1. ファイルサイズを検証できません。それを行う方法を説明する wiki 記事がありますが、機能しません。
  2. MiniMagick を使用している場合、完全性検証は機能しません (RAM の使用が心配な場合に非常に便利です)。破損した画像ファイルをアップロードすると、CarrierWave は最初はエラーをスローしますが、次回はそれを飲み込みます。
  3. 元のファイルを削除することはできません。代わりに、サイズ変更、圧縮などを行うことができます。その方法を説明する wiki 記事がありますが、やはり機能しません。
  4. RMagick や MiniMagick などの外部ライブラリに依存します。Paperclip は、変換コマンド ライン (ImageMagick) で直接動作します。そのため、Minimagick に問題がある場合 (私が持っていました)、Google 検索で何時間も無駄になります。この記事の執筆時点では、RMagick と Minimagick の両方が放棄されています (Minimagic の作成者に連絡しましたが、応答はありません)。
  5. いくつかの構成ファイルが必要です。これは利点と見なされますが、1 つの gem のためだけにプロジェクトの周りに単一の構成ファイルを配置するのは好きではありません。モデルの構成は、私にはより自然に思えます。これはどう考えても個人の好みの問題です。
  6. バグを見つけて報告すると、開発チームは本当に不在で忙しいです。自分でバグを修正するように言われます。空き時間に改善する個人的なプロジェクトのようです。私にとっては、締め切りのあるプロのプロジェクトには当てはまりません。
  7. mongomapper をネイティブにサポートしていない
  8. 生成されたすべてのファイル/サムネイルにストレージ スペースを使用します。通常のファイル ストレージを使用すると、inode が不足する可能性があります。

トンボ

  1. 他のほとんどの画像処理プラグインとの違いである Dragonfly の印象的な点は、ビューからオンザフライでサイズ変更できることです。
  2. 別のファイルでサムネイルのサイズ変更やその他のアクションを構成する必要がないため、時間とフラストレーションを大幅に節約できます。これにより、Rails のビュー コードがimage_tag @product.image.thumb('150x150#')可能になります。
  3. 魔法はすべてキャッシングによって可能になります。アップロード時に処理済みのバージョンを作成してから個々のバージョンの画像にリンクする代わりに、プラグインは要求に応じて画像を生成します。これは最初の読み込みの問題ですが、新しく作成されたイメージは、デフォルトで Rack::Cache を使用して後続のすべての読み込みのために http キャッシュされますが、スケーリングが問題になる場合は、他のより堅牢なソリューションを利用できます。

利点

  1. 画像サイズを頻繁に変更しますか? 例: ユーザーが写真のサイズを変更できるようにしたい場合 (または、他の理由でサイズの柔軟性が必要な場合)、または非常に迅速な開発を行う場合。はい: Dragonfly いいえ: Carrierwave または Paperclip のいずれか
  2. 問題なくmongomapperで使用できます
  3. キャッシング プロキシを使用している限り、パフォーマンスは問題ないはずです
  4. mongomapper で動作する必要があります (ActiveModel のみを拡張します)
  5. その場でサムを生成します (新しいレイアウト/サムサイズを簡単に作成できます)
  6. 保存できるファイルは 1 つだけです。省スペース
  7. 処理はオンザフライで行われます (Varnish、Squid、Rack::Cache などのキャッシュ プロキシの背後で使用されることを意図しているため、最初のリクエストには時間がかかる場合がありますが、後続のリクエストは非常に高速です)

短所

  1. キャッシュ プロキシなどがない場合、すべてのリクエストで CPU を消費しますrack::cache
  2. 必要に応じてサムをファイルとしてアクセスする方法はありません。

参考文献

于 2015-06-21T18:29:41.037 に答える
2

他の人がかなり良い要約を書いてくれました。私たちの経験から言えば、Dragonfly のセットアップにはより多くのメンテナンスが必要であり、途中で何人かの開発者の怠慢のために、オリジナルの後に残った多くの孤立したイメージで立ち往生していました。除去された。これは、バニラの搬送波では起こりませんでした。PS cloudinary に移行し (そして、carrierwave を使用)、満足しています。

于 2015-06-21T20:57:42.897 に答える