RailsアプリからAWS S3へ画像をアップロードしたい際、Carrierwaveとfogを使った方法が様々な記事で紹介されています。
しかしアップロードした画像を削除する方法まで紹介している記事は少なかったので、自分の備忘としてまとめておきます。
画像をアップロードする仕組みは、Carrierwaveとfogを使って既に構築済みであることが前提です。
なぜ画像を削除したいか
オブジェクトを削除する際に、オブジェクトに紐付いたアップロード済みの画像も削除しなければ、使用しない画像がS3内に溜まっていってしまいます!
オブジェクト削除時にS3内の画像も削除する
userオブジェクトのimageに画像がマウントされているとします。
before_destroy
で、オブジェクト削除時にS3からも画像を削除します。
app/models/user.rb
class User < ActiveRecord::Base
mount_uploader :image, ImageUploader
before_destroy :remove_image
private
def remove_image
image.remove!
image.thumb.remove! # サムネイルを持っていない場合は不要
rescue Exception => e
logger.error(e.message)
end
end
意外と簡単ですね!