1

私が理解しているようversionに、アップローダーで定義されているそれぞれについて、CarrierWave は元のファイルをキャッシュから tmp パスにコピーし、この tmp ファイルをこのバージョンで定義されている処理に引き渡します。その後、すべてのファイルを保存できます。場合によっては (ビデオファイルのサムネイルを生成する場合など)、このコピーに非常にコストがかかることがあります。CarrierWave をコピーせずに、元のファイルがキャッシュにある間に元のファイルからバージョンを生成できるようにすることはできますか?

Edit I have move_to_cacheand move_to_storeto return false true (おっと、すぐに自分の頭を忘れてしまいます)。そして、次の行にテスト処理モジュールを書きましたCarrierWave::RMagick

module CarrierWave
  module Thumbnailer
    def generate_thumbnails
      debugger
      x = 1
    end
  end
end

アップローダー内に次の行があります

version :thumb do
  process :generate_thumbnails
end

しかし、debugger(ここで処理を開始できる) で実行が停止すると、CarrierWave はアップロードされたファイルを既にコピーして名前を変更しています。どちらもキャッシュ ディレクトリ内に表示されます。

4

1 に答える 1

2

README から、 Large Files ... の下の readme を確認してください。

class MyUploader < CarrierWave::Uploader::Base
  def move_to_cache
    true
  end
  def move_to_store
    true
  end
end

move_to_cache および/または move_to_store メソッドが true を返すと、ファイルは (コピーではなく) キャッシュとストアにそれぞれ移動されます。

于 2012-06-03T16:03:58.277 に答える