Rails carrierwave fog rmagickで画像アップロード
プロダクト開発でアイコンやバックグラウドイメージをアップロードできるようにしたいので試しに使用してみました。
すでに色々な方々が試しているみたいですが、自分なりの備忘として残しておきます。
環境変数はハードコーディングせずにgem:dotenvを使用して実装しています。
carrierwave
CarrierWave.configure do |config| config.fog_credentials = { provider: 'AWS', aws_access_key_id: ENV['AWS_ACCESS_KEY_ID'], aws_secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'], region: ENV['AWS_REGION'], path_style: true } config.fog_public = true config.fog_attributes = {'Cache-Control' => 'public, max-age=86400'} config.remove_previously_stored_files_after_update = false config.cache_storage = :fog case Rails.env when 'production' config.fog_directory = ENV['AWS_S3_BUCKET'] end end # 日本語の文字化けを防ぐ CarrierWave::SanitizedFile.sanitize_regexp = /[^[:word:]\.\-\+]/
Uploader
class ImageUploader < CarrierWave::Uploader::Base include CarrierWave::RMagick storage :fog def store_dir "images/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end version :thumb do process resize_to_fit: [100, 100] end def extension_whitelist %w(jpg jpeg png) end def filename "image_#{model.id}.#{file.extension}" if original_filename end end
Model
class User < ApplicationRecord mount_uploader :icon, ImageUploader end
参考
Rails4.2+carrierwave+fog+rmagickでS3に画像アップロードした話 - Qiita
CarrierWave + Rails 5.1で画像アップローダー | 酒と涙とRubyとRailsと
GitHub - carrierwaveuploader/carrierwave: Classier solution for file uploads for Rails, Sinatra and other Ruby web frameworks