CarrierWaveのUploaderクラス単位でS3画像の有効期限を変更する

特定の Uploader クラス単位(レコード単位)で S3 画像の有効期限を儲けたい時の設定方法。

config/initializers/carrierwave.rb

CarrierWave.configure do |config|
  config.storage = :fog
  config.fog_credentials = {
    :provider              => "AWS",
    :aws_access_key_id     => "YOUR_ACCESS_KEY",
    :aws_secret_access_key => "YOUR_SECRET_KEY",
    :region                => "ap-northeast-1",
  }
  config.fog_directory = "YOUR_BUCKET_NAME"
  config.fog_public    = true # デフォルトは有効期限を設定しない
end

app/uploaders/foo_image_uploader.rb

class FooImageUploader < CarrierWave::Uploader::Base
  def initialize(*)
    super
    self.fog_public = false
    expiration = model.end_at ? model.end_at - Time.now : "デフォルトの有効秒数"
    self.fog_authenticated_url_expiration = expiration
  end

  process :resize_to_fit => [400, 300]

  # some code...
end

利用した Gem のバージョン

  • fog (1.12.1)
  • carrierwave (0.8.0)