5

データベースにサイズのリストがあり、画像のサイズを変更する必要があり、carrierwave を使用してアップロードします。

サイズ変更を処理するためにキャリアウェーブを使用する方法はありますか? 今は rake タスクを使用していますが、おそらく girl_friday アクターの使用に切り替えて、より簡単にトリガーできるようにします。

編集

最終的に、適切な Carrierwave バージョンを使用せずに終了しましたが、carrierwave コールバックを使用してサイズ変更ジョブをバックグラウンド プロセッサに追加しました (この場合は girl_friday です)。

class ImageUploader < CarrierWave::Uploader::Base
  after :store, :resize_by_db
  def resize_by_db(args)
    widths = Resolutions.all.map &:width
    widths.each do |width|
      RESIZE_QUEUE  << {:source => path, :width => width}
    end
  end
end
4

2 に答える 2

3

インスタンス メソッドからクラス メソッド 'version' を呼び出す必要があります。

process :selected_version

def selected_version
  aspect_ratio = model.aspect_ratio
  name = aspect_ratio.name

  self.class.version name do
    process :crop
    process :resize_to_fit => [aspect_ratio.width, aspect_ratio.height]
  end
end
于 2015-12-01T23:02:02.933 に答える
2

これが機能するかどうかはわかりませんが、アップローダ モデルにバージョンを動的に追加できると思います。

アップローダーでこのメソッドを試してみたところ、メソッドを呼び出すだけで、アップローダーで新しいバージョンを定義できました。

def self.defind_version(version_title, width, height)
  version version_title do
    process :resize_to_limit => [width, height]
  end
end

したがって、そのメソッド呼び出しを、バージョンのリストを作成する db テーブルの create フックに組み込むことができます。

単なるアイデアですが、本番環境に入る前に徹底的にテストします。

于 2013-02-14T23:54:31.733 に答える