2012-08-11 21 views
15

मुझे पेपरक्लिप और एस 3 के साथ हेरोकू पर चलने वाला एक रेल ऐप बनाया गया है। मैंने साइट के माध्यम से अपने एस 3 बाल्टी में छवियों को अपलोड करने में कामयाब रहा है (मैं उन्हें अमेज़ॅन कंट्रोल पैनल पर अपनी बाल्टी में दिखा सकता हूं)।पेपरक्लिप एस 3 - छवियां अपलोड कर सकते हैं लेकिन उन्हें नहीं देख सकते हैं

लेकिन जब मैं एक छवि टैग i.e. <% = image_tag x.photo.url%> जोड़ता हूं, तो मुझे निम्न HTML (टैग यहां छोड़े गए टैग) मिलते हैं, कोई चित्र प्रदर्शित नहीं होता है!

img alt = "Test_tree" src = "http://s3.amazonaws.com/hiphotos/ads/photos/000/000/015/original/test_tree.jpg?1344661020"

कृपया मदद! बाल्टी में होने के बावजूद मैं छवियों को क्यों नहीं देख सकता?

धन्यवाद इतना लोग

+0

चेक [मेरा उत्तर] (http://stackoverflow.com/a/ 25080586/316700) – fguillen

उत्तर

11

सबसे पहले, यूआरएल आप अपने कोड में उपयोग करने के लिए कोशिश कर रहे हैं यह है:

http://s3.amazonaws.com/hiphotos/ads/photos/000/000/015/original/test_tree.jpg 

जब आप ब्राउज़र में है कि लिंक पर जाएँ, तो आप निम्न देखें:

:

<message> 
    The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint. 
</Message> 
<RequestId>810A6AE1D141304C</RequestId> 
<Bucket>hiphotos</Bucket> 
<HostId> 
    XXZ+s+slgZLsRWy5NiU/G0yAKBLftw0oT2dDKpas532qXJEPSrISVPqfZsEgpb2J 
</HostId> 
<Endpoint>hiphotos.s3.amazonaws.com</Endpoint> 

तो अगर हम सही एंडपॉइंट का उपयोग करके यूआरएल को संशोधित हम इस मिल

जो सही छवि को वापस करता है।

यदि आप यूरोपीय बाल्टी का उपयोग कर रहे हैं, तो ऐसा हो सकता है, और यह उस मणि की गलती हो सकती है जिसका उपयोग आप चीजों को एस 3 पर धक्का देने के लिए कर रहे हैं।

पेपरक्लिप, एस 3 और यूरोपीय बाल्टी को अच्छी तरह से खेलने के लिए कैसे प्राप्त करें इस पर बहुत सारे लेख हैं।

मुझे पता चला है कि चूंकि मैंने asset_sync मणि का उपयोग शुरू किया है, जो aws-s3 मणि के बजाय धुंध का उपयोग करता है, मुझे पेपरक्लिप और एस 3 के साथ कोई और परेशानी नहीं है।

तो मुझे संदेह है कि इस समस्या को मेरे लिए दूर जाने के साथ कोहरे का कुछ संबंध है। यदि आप कुछ और उपयोग कर रहे हैं, तो मैं इसे स्विच करने की अनुशंसा करता हूं।

+2

आप, मेरे दोस्त, एक सुंदर व्यक्ति हैं :) इस पर काम करने में दो दिन बिताए - आपके सुझाव ने इसे हल किया। अपने मॉडल में जोड़ने के लिए किया था: : यूआरएल => ": s3_domain_url", : पथ => (जो भी ... नहीं तो त्रुटि शामिल होने के लिए की जरूरत है यूआरएल के साथ) धन्यवाद इतना! – Misrab

+0

हे, कोई समस्या नहीं! – stephenmurdoch

+0

समस्या का बहुत अच्छा विश्राम। –

18

एक कहा जाता पेपरक्लिप प्रारंभकर्ता एक फ़ाइल बनाएँ:

# config/initializers/paperclip.rb 
# We are actually setting this to 's3_domain_url', 
# so it's not a placeholder for something else. 
Paperclip::Attachment.default_options[:url] = ':s3_domain_url' 
Paperclip::Attachment.default_options[:path] = '/:class/:attachment/:id_partition/:style/:filename' 

या आप भी बन सकता था यह अंदर production.rb:

config.paperclip_defaults = { 
    :storage => :s3, 
    :s3_credentials => { 
     :bucket => ENV['S3_BUCKET_NAME'], 
     :access_key_id => ENV['AWS_ACCESS_KEY_ID'], 
     :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'] 
    }, 
    :url =>':s3_domain_url', 
    :path => '/:class/:attachment/:id_partition/:style/:filename', 
} 
+4

मैंने इसका अर्थ यह लिया कि मुझे अपने एस 3 डोमेन को यूआरएल कुंजी के मान के रूप में रखना चाहिए। बाद में डिबगिंग का एक घंटा, मैं देखता हूं कि पेपरक्लिप पागल है और विशेष रूप से उस कुंजी के लिए "s3_domain_url" मान को देखता है। सावधान! –

+1

धन्यवाद @awesome_person, मैंने अभी यह स्पष्ट करने के लिए एक टिप्पणी की है। – Zorayr

+0

क्या आप url लाइन पर टिप्पणी के रूप में @awesome_person से जानकारी जोड़ सकते हैं? – retroGiant