2011-11-15 14 views
19

開発用にローカルマシンにイメージをアップロードしたいが、それらをAmazon S3アカウントに保存する。イメージをローカルで開発用に保存するRails Paperclip

if Rails.env.development? 
    has_attached_file :photo, :styles => { :thumb => '40x40#', :medium => '150x200>', :large => '300x300>'}, 
          :convert_options => { :thumb => "-quality 92", :medium => "-quality 92", :large => "-quality 92" }, 
          :processors => [:cropper] 
else 
    has_attached_file :photo, :styles => { :thumb => '40x40#', :medium => '150x200>', :large => '300x300>'}, 
          :convert_options => { :thumb => "-quality 92", :medium => "-quality 92", :large => "-quality 92" }, 
          :storage => :s3, 
          :s3_credentials => "#{RAILS_ROOT}/config/s3.yml", 
          :path => ":attachment/:id/:style.:extension", 
          :bucket => 'birthdaywall_uploads', 
          :processors => [:cropper] 
end 

upload.rb

いくつかのコードの繰り返しがここにあります。 コードの重複なしでこれを書く方法はありますか?

設定/環境/ development.rb

PAPERCLIP_STORAGE_OPTS = { 
    :styles => { :thumb => '40x40#', :medium => '150x200>', :large => '300x300>' }, 
    :convert_options => { :all => '-quality 92' }, 
    :processor  => [ :cropper ] 
    } 

設定/環境/ production.rb

PAPERCLIP_STORAGE_OPTS = { 
    :styles => { :thumb => '40x40#', :medium => '150x200>', :large => '300x300>' }, 
    :convert_options => { :all => '-quality 92' }, 
    :storage  => :s3, 
    :s3_credentials => "#{RAILS_ROOT}/config/s3.yml", 
    :path   => ':attachment/:id/:style.:extension', 
    :bucket   => 'birthdaywall_uploads', 
    :processor  => [ :cropper ] 
    } 

答えて

13

確かに:ここで

はヨルダン、以下のアンドレイに対する解決策のおかげで大きな時間であります。また、代わりに同じオプションを3回指定する :convert_optionsため :allの使用を注意し、 unless/ merge!明らかブロックに加えて

paperclip_opts = { 
    :styles => { :thumb => '40x40#', :medium => '150x200>', :large => '300x300>' }, 
    :convert_options => { :all => '-quality 92' }, 
    :processor  => [ :cropper ] 
} 

unless Rails.env.development? 
    paperclip_opts.merge! :storage  => :s3, 
         :s3_credentials => "#{RAILS_ROOT}/config/s3.yml", 
         :path   => ':attachment/:id/:style.:extension', 
         :bucket   => 'birthdaywall_uploads', 
end 

has_attached_file :photo, paperclip_opts 

:このような何かを試してみてください。

+0

おかげジョーダン。私はあなたが提案し、上記のアイデアを組み合わせて、私が「なし」の記述を取り除くことができるようにします。 – chell

17

もう1つの解決策は、paramsを含むハッシュを定数に移動することです。これはconfig/environments/*。rbファイルで定義されます。 /場合のモデルにメソッドを定義しながら、しない限り、次に、あなただけ少し厄介である私はproduction.rbでクリップのデフォルトのオプションを変更しないのはなぜ

+0

優秀な考えです。ありがとう。私はあなたの答えをヨルダンと組み合わせる必要があるので、これをどのように授与するのか分かりません。 – chell

3

思い使用

has_attached_file :proto, PAPERCLIP_STORAGE_OPTS 

を使用することができますか?

は、設定/環境/ production.rbにこれを追加します。

Paperclip::Attachment.default_options.merge!({ 
    :storage => :s3, 
    :bucket => 'bucketname', 
    :s3_credentials => { 
    :access_key_id => ENV['S3_ACCESS_KEY'], 
    :secret_access_key => ENV['S3_SECRET_KEY'] 
    } 
}) 
関連する問題