LoginSignup
16
11

More than 5 years have passed since last update.

Carrierwaveでアップロードした画像に新しいバージョンを追加する

Posted at

carrierwaveはシンプルで使いやすい画像アップロードgemで、ActiveRecordと良い感じに連携して動いてくれます。
デフォルトではfileに保存してファイル名をDBに持ちますが、クラウド(S3とか)にも対応しているようですね。

さて、carrierwaveの便利な機能の一つに、versionがありますが、運用中のアプリケーションにバージョンを追加したくなったとき、どうすれば良いでしょうか。

user.rb
class User < ActiveRecord::Base
  mount_uploader :avatar, ImageUploader
end
image_uploader.rb
class ImageUploader < CarrierWave::Uploader::Base
  include CarrierWave::RMagick
  version :small do
    process resize_to_fill: [90, 60]
  end

  # 以下を追加
  version :medium do
    process resize_to_fill: [300, 200]
  end
end

#recreate_versions!というメソッドが用意されていて、こいつを叩けばキャッシュとストレージに保存されます。

pry> User.all.each { |user| user.avatar.recreate_versions! }

キャッシュは軽く中身見てみたらローカルファイルのようですね。
クラウドへの保存を想定して、キャッシュとしてファイルに保存しているようです。

https://github.com/carrierwaveuploader/carrierwave#recreating-versions
https://github.com/carrierwaveuploader/carrierwave/blob/master/lib/carrierwave/uploader/versions.rb#L211

16
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
11