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