2011-11-15 16 views
19

मैं अपनी स्थानीय मशीन पर विकास के लिए छवियां अपलोड करना चाहता हूं लेकिन उन्हें उत्पादन के लिए अपने अमेज़ॅन एस 3 खाते पर स्टोर करना चाहता हूं।उत्पादन के लिए स्थानीय रूप से विकास एस 3 के लिए स्टोर छवियां रेल पेपरक्लिप

upload.rb

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 

कुछ कोड यहाँ पुनरावृत्ति नहीं है। कोड डुप्लिकेशन के बिना इसे लिखने का कोई तरीका है।

config/वातावरण/development.rb

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

config/पर्यावरण/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

ज़रूर:

यहाँ जॉर्डन और नीचे एंड्री का हल धन्यवाद बड़ा समय है । स्पष्ट 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 

इसके अलावा, यह भी :convert_options के लिए :all के उपयोग पर ध्यान दें बजाय एक समान विकल्प को निर्दिष्ट करने के लिए तीन बार की: कुछ इस तरह की कोशिश करो।

+0

धन्यवाद जोर्डन। जैसा कि आप सुझाव देते हैं मैं उपरोक्त विचार को गठबंधन करता हूं ताकि मैं बयान तक छुटकारा पा सकूं। – chell

17

एक और समाधान हैश को स्थिरांक में पैरा के साथ स्थानांतरित करना है, जिसे कॉन्फ़िगरेशन/वातावरण/* आरबी फाइलों में परिभाषित किया जाएगा। तो फिर तुम सिर्फ

has_attached_file :proto, PAPERCLIP_STORAGE_OPTS 

उपयोग कर सकते हैं का उपयोग करना, जब तक कि मॉडल में, जबकि तरीकों को परिभाषित करने के लिए थोड़ा गन्दा है अगर/मुझे लगता है कि

+0

डब्ल्यूओडब्ल्यू यह एक अच्छा विचार है। धन्यवाद। मुझे नहीं पता कि इसे कैसे पुरस्कृत किया जाए क्योंकि मुझे जॉर्डन के साथ अपना जवाब गठबंधन करने की आवश्यकता है। – chell

3

क्यों production.rb में पेपरक्लिप डिफ़ॉल्ट विकल्प को संशोधित नहीं?

config/वातावरण/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'] 
    } 
}) 
संबंधित मुद्दे