2013-10-13 7 views
6

मैं पेपरक्लिप से वापस आने वाले एंडपॉइंट को कॉन्फ़िगर करने की कोशिश कर रहा हूं जब मेरी ऑब्जेक्ट को अमेज़ॅन की S3 सेवा पर सफलतापूर्वक अपलोड किया गया है। अपलोड और सबकुछ ठीक से काम कर रहा है, लेकिन अपलोड किए जाने वाले यूआरएल को अपलोड करने के लिए गलत है।रेल 4, पेपरक्लिप, अमेज़ॅन एस 3 कॉन्फ़िगर अमेज़ॅन पथ

अभी, यूआरएल लौटाया जा रहा है http://s3.amazonaws.com/path/to/my/items (जैसा कि नीचे दी गई तस्वीर में देखा गया है)।

s3.amazonaws.com के बजाय

, मैं जड़ की तरह बाल्टी के स्थान पर विशिष्ट होना चाहते हैं (उदाहरण के लिए s3-us-west-1.amazonaws.com/path/to/my/items)

enter image description here

मुझे एक अलग यूआरएल पथ (s3.amazonaws.com से कुछ और करने के लिए) को कहां और कॉन्फ़िगर करना चाहिए?

#Paperclip Amazon S3 
    config.paperclip_defaults = { 
     :storage => :s3, 
     :url => "https://s3-us-west-1.amazonaws.com/", 
     :s3_credentials => { 
      :bucket => ENV['S3_BUCKET_NAME'], 
      :access_key_id => ENV['AWS_ACCESS_KEY_ID'], 
      :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'] 

     } 

    } 

कौन सा कोई असर दिखाई नहीं दिया: मैं तरह मेरे विन्यास फाइल में ऊपर पथ के साथ एक यूआरएल को जोड़ने के लिए कोशिश की है। कृपया सलाह दें कि मुझे यह विकल्प कहां रखना चाहिए!

अग्रिम धन्यवाद!

+0

** ** बदलें ': यूआरएल =>" https://s3-us-west-1.amazonaws.com/

यह भी पाठकों को इस समस्या पर पहुंच जाते हैं रुचि का हो सकता "' ** ** के साथ 's3_host_name => 's3-us-west-1.amazonaws.com' और आप अच्छे होंगे। –

उत्तर

11

यदि आप एस 3 का उपयोग करने जा रहे हैं, तो हमने पाया है कि आपको अपने वास्तविक मॉडल (केवल कॉन्फ़िगरेशन फाइलों) में एस 3 क्रेडेंशियल शामिल करना होगा। यहाँ हम क्या करना है:

मॉडल

#Image Upload 
Paperclip.options[:command_path] = 'C:\RailsInstaller\ImageMagick' 
has_attached_file :image, 
     :styles => { :medium => "x300", :thumb => "x100" }, 
     :default_url => "****", 
     :storage => :s3, 
     :bucket => '****', 
     :s3_credentials => S3_CREDENTIALS, 
      :url => "/:image/:id/:style/:basename.:extension", 
      :path => ":image/:id/:style/:basename.:extension" 

config/application.rb

# Paperclip (for Amazon) (we use EU servers) 
    config.paperclip_defaults = { 
    :storage => :s3, 
    :s3_host_name => 's3-eu-west-1.amazonaws.com' 
    } 

config/s3.yml

#Amazon AWS Config 
development: 
    access_key_id: ********** 
    secret_access_key: ************** 
    bucket: **** 

production: 
    access_key_id: *********** 
    secret_access_key: *********** 
    bucket: **** 

उम्मीद है कि यह मदद करता है?

+2

आप ** मॉडल ** में ': s3_host_name' कुंजी भी डाल सकते हैं। –

+0

प्रत्येक मॉडल में मेरे प्रमाण पत्र लिखने के बजाय मुझे इसे कॉन्फ़िगर/aws.yml में लिखना पड़ा और यह काम किया। –

0

मुझे स्प्री 2.2 में माइग्रेट करते समय भी वही समस्या थी और मुझे अभी भी यह सुनिश्चित नहीं है कि इसे सही तरीके से कैसे हल किया जाए। ऐसा लगता है जैसे पेपरक्लिप कॉन्फ़िगरेशन से पथ अपडेट कर रहा था, लेकिन ऐसा नहीं है।

एक बेहतर समाधान अभाव है, मैं इस तरह स्प्री :: छवि वर्ग अधिरोहित किया है:

1 Spree::Image.class_eval do 
2 has_attached_file :attachment, 
3  styles: { mini: '48x48>', small: '100x100>', product: '240x240>', large: '600x600>' }, 
4  default_style: :product, 
5  url: '/spree/products/:id/:style/:basename.:extension', 
6  path: 'products/:id/:style/:basename.:extension', 
7  convert_options: { all: '-strip -auto-orient -colorspace sRGB' }· 
8 end 
0

कुछ प्रयोग करने के बाद मैं ने पाया है कि स्थापित करने :s3_host_name विश्व स्तर पर पर्याप्त होता। मैं एक ही समस्या के साथ समाप्त हुआ क्योंकि मैं :s3_region सेट कर रहा था, जिसका उपयोग पेपरक्लिप (4.3.1 के बाद, aws-sdk 2 के साथ) संलग्नक को संग्रहीत करने के लिए किया जा रहा था, लेकिन यूआरएल उत्पन्न करते समय नहीं। https://github.com/thoughtbot/paperclip/wiki/Restricting-Access-to-Objects-Stored-on-Amazon-S3