carrierwaveでS3にアップロードする際にアップローダー毎にメタデータを設定する

carrierwaveでS3にアップロードする際にアップローダー毎にメタデータを設定する

carrierwaveでjson等をアップロードする際に日本語が文字化けしてしまったのでcharset等のメタデータを設定するメモ。

Gemfile

# Gemfile
gem 'carrierwave'
gem 'fog', require: 'fog/aws'

carrierwaveの設定

# config/initializer/carrierwave.rb
CarrierWave.configure do |config|
  config.storage = :fog
  config.directory_permissions = 0777

  config.fog_credentials = {
    provider:              'AWS',
    aws_access_key_id:     アクセスキー,
    aws_secret_access_key: シークレットキー,
    region:                ap-northeast-1 # 東京リージョン
  }

  config.fog_public = true
  config.fog_attributes = { 'Cache-Control' => "max-age=#{365.day.to_i}" }

  case Rails.env
    when 'production'
      config.fog_directory = 'myapp-prd'
    when 'staging'
      config.fog_directory = 'myapp-stg'
    when 'development'
      config.fog_directory = 'myapp-dev'
  end
end

各アップローダーの設定

# app/uploaders/sample_uploader.rb
class SampleUploader < CarrierWave::Uploader::Base
  def store_dir
    "test/#{model.id}"
  end

  def fog_attributes
    {
      'Content-Type' =>  'application/json;charset=utf-8',
      'Cache-Control' => "max-age=#{365.day.to_i}"
    }
  end
end

TAG

  • このエントリーをはてなブックマークに追加
kurashita
エンジニア kurashita kurashita

基本的にRuby on Railsで開発してます。最近はvue.jsも。好きな塔は円城です。