Railsの実行環境に応じてpaperclipの設定を使い分けたい
2016/04/13
productionではS3に画像を上げて、developmentではローカルに画像保存したい、と思った。
http://stackoverflow.com/a/8132385
が良かったので、パクった。
Modelの中で『productionだったらstorageはs3を使う』といった条件分岐を書くのはちょっと汚い。
なので、各実行環境のenvironmentsにpaperclipのオプションを書いておき、それをModelが参照する方法がいいんじゃないか。
って感じ。
Modelの例
1 2 3 4 |
class Actor < ActiveRecord::Base has_attached_file :avatar, PAPERCLIP_STORAGE_OPTS validates_attachment :avatar, content_type: { content_type: %w(image/jpg image/jpeg image/png image/gif)} end |
PAPERCLIP_STORAGE_OPTS
をenvironments以下のdevelopment.rbとかに書いておく。
development.rbだったら…
1 2 3 4 5 6 |
Rails.application.configure do PAPERCLIP_STORAGE_OPTS = { styles: {medium: '300x300>', thumb: '100x100>'}, default_url: '/images/:style/missing.png' } end |
production.rbだったら…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Rails.application.configure do PAPERCLIP_STORAGE_OPTS = { styles: {medium: '300x300>', thumb: '100x100>'}, default_url: '/images/:style/missing.png', :storage => :s3, :s3_region => 'us-east-1', s3_host_name: 's3.amazonaws.com', :s3_permissions => :private, :s3_credentials => { :bucket => ENV['S3_BUCKET_NAME'], :access_key_id => ENV['AWS_ACCESS_KEY_ID'], :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'] } } end |