2012-10-16 11 views
11

मेरे पास फ़ोल्डर के साथ अमेज़ॅन एस 3 पर एक बाल्टी है।बाल्टी के भीतर रूबी एक्सेस फ़ोल्डर के लिए aws-sdk

s3 = AWS::S3.new(
    :access_key_id => "KEY", 
    :secret_access_key => "SECRET" 
) 

bucket = s3.buckets["my_bucket/my_folder"] 
bucket.do_stuff.... 

मैं बदले में निम्न त्रुटि हो रही है:

बाल्टी पर पहुंचने का प्रयास कर रहे हैं संबोधित किया जाना चाहिए का उपयोग कर रहा एडब्ल्यूएस-sdk मणि के माध्यम से इसे नीचे दिए तरीक़े का उपयोग करने की कोशिश कर रहा हूँ निर्दिष्ट अंतराल। कृपया इस अंतिम बिंदु पर सभी भावी अनुरोध भेजें।

कोई विचार क्या मैं गलत कर सकता हूं?

+0

संभावित रिपोस्ट http://stackoverflow.com/questions/6581502/problem-in-accessing-bucket-of-my-aws-s3-account – sgud

+0

@sgud यह सही नहीं है, आपके द्वारा प्रदान किया गया लिंक AWS-S3 के बारे में है मणि जिसमें एक अलग वाक्यविन्यास है - एक वर्ग के निरंतर – Anatoly

+1

"my_folder" को ऑब्जेक्ट के नाम का एक हिस्सा है, बाल्टी – Anatoly

उत्तर

22

शायद S3 बाल्टी का उपयोग करने के अमेरिका-पूर्व (डिफ़ॉल्ट स्थान) के बाहर स्थित है कोशिश कर रहे हैं, तो यह आप की मदद करनी चाहिए:

US Standard *       s3.amazonaws.com(default) 
US West (Oregon) Region     s3-us-west-2.amazonaws.com 
US West (Northern California) Region s3-us-west-1.amazonaws.com 
EU (Ireland) Region      s3-eu-west-1.amazonaws.com 
Asia Pacific (Singapore) Region   s3-ap-southeast-1.amazonaws.com 
Asia Pacific (Tokyo) Region    s3-ap-northeast-1.amazonaws.com 
South America (Sao Paulo) Region  s3-sa-east-1.amazonaws.com 
:

s3 = AWS::S3.new(
    :access_key_id => "KEY", 
    :secret_access_key => "SECRET" 
    :s3_endpoint => 's3-eu-west-1.amazonaws.com' 
) 

following list से अपने S3 enpdpoint चुनें

ऑब्जेक्ट एक्सेस के संदर्भ में, बाल्टी नाम my_bucket है, लेकिन my_folder ऑब्जेक्ट का हिस्सा होना चाहिए।

+2

से नीचे देखें: s3_host_name इसके बजाय: s3_endpoint मेरे लिए काम करता है। – laertiades

+0

http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region –

+0

यह मेरे लिए काम करता है: 's3 = Aws :: S3 :: Client.new (endpoint: 'https: // s3-ap-southeast-1.amazonaws.com ') ' –

6

आपको बाल्टी के लिए अपने क्षेत्र के विशिष्ट एंडपॉइंट को कॉन्फ़िगर करने की आवश्यकता है (जहां इसे बनाया गया था)। आप के साथ ऐसा कर सकते हैं:

AWS.config(:s3_endpoint => '...') 
s3 = AWS::S3.new 

या

s3 = AWS::S3.new(:s3_endpoint => '...') 

आप डीएनएस comptible बाल्टी नाम का उपयोग (यह भी बाल्टी नाम में डॉट्स बचने के लिए) द्वारा भविष्य में इससे बचने कर सकते हैं। यदि एक बाल्टी नाम एक वैध सबडोमेन है, तो आप क्षेत्र विशिष्ट अंतराल को कॉन्फ़िगर किए बिना अपनी बाल्टी को संबोधित कर सकते हैं। निम्नलिखित पर विचार करें:

http:://bucket-name.s3.amazonaws.com/path/to/object.txt 

कहाँ बाल्टी "बाल्टी-नाम" और वस्तु कुंजी का नाम है कि "path/to/object.txt"। यह बाल्टी किसी भी क्षेत्र में मौजूद हो सकती है, और फिर भी आप इसे "डिफ़ॉल्ट" क्षेत्र का उपयोग करके एक्सेस कर सकते हैं। जब बाल्टी नाम DNS-संगत नहीं है, उसके बाद URL लगता है:

http://s3.amazon.com/bucket/name/path/to/object.txt 

उपरोक्त उदाहरण में, बाल्टी है "बाल्टी/नाम" है, जो DNS संगत नहीं है। यह पथ का हिस्सा बन जाता है, और अब s3.amazon.com को क्षेत्र विशिष्ट अंत बिंदु (यदि क्लासिक क्षेत्र में बाल्टी नहीं बनाया गया था) के साथ प्रतिस्थापित किया जाना चाहिए।

जैसा कि किसी और ने बताया है, पथ ऑब्जेक्ट कुंजी का हिस्सा होना चाहिए, बाल्टी नाम नहीं। यह आपको एक सामान्य उपसर्ग द्वारा वस्तुओं को समूहबद्ध करने की अनुमति देता है। '/' को वर्चुअल फ़ोल्डर (केवल सम्मेलन द्वारा) के रूप में उपयोग किया जाता है।

# print the key of every object with the given prefix 
s3.buckets['bucket-name'].objects.with_prefix('path/to/').each do |object| 
    puts object.key 
end 
1
has_attached_file :photo, 
    storage: :s3, 
    styles: { medium: "300x300>", thumb: "100x100>" }, 
    s3_credentials: "#{Rails.root}/config/aws.yml", 
    bucket: "bucket-name", 
    s3_host_name: "s3-ap-southeast-1.amazonaws.com", 
    url: ":s3_domain_url", 
    path: 'books/:id/photo/:style_:basename.:extension' 

मेरे लिए काम किया :)

1

Godsaur द्वारा जवाब अनिवार्य रूप से सही है। हालांकि, यह पुराना प्रतीत होता है, शायद एसडीके संस्करण 1 के लिए?

इस संस्करण 2 के लिए मेरे लिए काम किया:

s3 = Aws::S3::Client.new(endpoint:'https://s3-ap-southeast-1.amazonaws.com') 

देखें docs

+0

लगता है यह मेरे लिए काम करता है चियर्स! –