2015-01-08 10 views
5

मैं रेल के साथ उपयोग के लिए अमेज़ॅन सरल संग्रहण सेवा सेट अप करने का प्रयास कर रहा हूं। मैं यह त्रुटि संदेश हो रही है:रेलवे में AWS S3 - s3_signature_version पैरामीटर को सेट करने के लिए कैसे करें

The authorization mechanism you have provided is not supported. Please use AWS4-HMAC-SHA256. 

समस्या यह है कि मैं फ्रैंकफर्ट S3 क्षेत्र चुना है, और वहाँ केवल V4 योजना का समर्थन कर रहा है। यह वही त्रुटि संदेश है जैसे this पोस्ट, जो आपको समाधान here पर निर्देशित करता है, निर्देशों के साथ "क्लाइंट का निर्माण करते समय: s3_signature_version पैरामीटर को सेट करें: v4" कैसे सेट करें। आदेश है:

s3 = AWS::S3::Client.new(:s3_signature_version => :v4) 

मेरा सवाल है, मैं यह कैसे कर सकता हूं? मैं यह कोड कहां रखूं?

संपादित करें:

मैं इस प्रकार carrier_wave.rb में :s3_signature_version => :v4 डालने की कोशिश की, लेकिन अपलोड करने के दौरान Heroku को यह कहा [fog][WARNING] Unrecognized arguments: s3_signature_version, और यह कोई फर्क नहीं था, मैं अभी भी त्रुटि मिलती है।

config/initializers/carrier_wave.rb:

if Rails.env.production? 
     CarrierWave.configure do |config| 
     config.fog_credentials = { 
      # Configuration for Amazon S3 
      :provider    => 'AWS', 
      :aws_access_key_id  => ENV['S3_ACCESS_KEY'], 
      :aws_secret_access_key => ENV['S3_SECRET_KEY'], 
      :s3_signature_version => :v4 
     } 
     config.fog_directory  = ENV['S3_BUCKET'] 
     end 
    end 

संपादित करें:

मैं उत्तरी कैलिफोर्निया क्षेत्र है, जिसके लिए यह एक समस्या होना चाहिए नहीं है का उपयोग कर एक नया बाल्टी बना लिया है, लेकिन मुझे अभी भी वही त्रुटि संदेश मिल रहा है।

संपादित करें:

यह नहीं है कोई फर्क या तो:

if Rails.env.production? 
     CarrierWave.configure do |config| 
     config.fog_credentials = { 
      # Configuration for Amazon S3 
      :provider    => 'AWS', 
      :aws_access_key_id  => ENV['S3_ACCESS_KEY'], 
      :aws_secret_access_key => ENV['S3_SECRET_KEY'] 
     } 
     config.fog_directory  = ENV['S3_BUCKET'] 
     config.fog_attributes = {:s3_signature_version => :v4} 
     end 
    end 
+0

लेकिन वह सिर्फ यह है - मैं जहां वह यह है कि पता नहीं है। मैं इसे किस फाइल में डालूं? मैं एडब्ल्यूएस, एस 3 और सब कुछ नया हूं और इसे परेशान कर रहा हूं। - – BMW

+0

के साथ अपने गहरे लाल रंग का कोड में – Bazley

+0

अभी के लिए मैं सिर्फ इस प्रश्न को एडब्ल्यूएस के लिए समर्थन में पूछने के लिए लिंक करना चाहता हूं https://forums.aws.amazon.com/thread.jspa?threadID=168816 – MZaragoza

उत्तर

3

मैं समस्या थी, कि स्प्री v2.3एडब्ल्यूएस-sdk v1.27.0 को उतारना चाहते थे। लेकिन पैरामीटर s3_signature_versionv1.31.0 (और चीन के लिए प्रति डिफ़ॉल्ट सेट) में पेश किया गया था।

तो मेरे मामले में फ्रैंकफर्ट के लिए निम्न विन्यास पूरी तरह से नजरअंदाज कर दिया गया:

AWS.config(
    region: 'eu-central-1', 
    s3_signature_version: :v4 
) 
+0

आपने उस कोड को किस फ़ाइल में रखा था ? config/initializers/carrier_wave.rb? – Bazley

+0

यह मेरे लिए 'कॉन्फ़िगर/प्रारंभकर्ता/paperclip.rb' था। लेकिन यह महत्वपूर्ण नहीं है कि आप उस कॉन्फ़िगरेशन को चलाते हैं। – schmijos

0

मैं इस एक ही समस्या थी और जहां s3_signature_version को लागू करने पर कोई भी मार्गदर्शन नहीं मिल सका: v4 आदेश।

अंत में, मैंने मूल रूप से फ्रैंकफर्ट में मौजूदा बाल्टी को हटा दिया और मानक अमेरिकी क्षेत्र में बनाया और यह काम करता है (बाल्टी को बदलने के लिए उपयोगकर्ता को बाल्टी तक पहुंचने वाली अनुमति नीति को अद्यतन करने के बाद) बाल्टी बदल गई है)।

मुझे फ्रैंकफर्ट में बाल्टी रखना अच्छा लगेगा, लेकिन मेरे पास इस मुद्दे के साथ सर्किल में घूमने के लिए 16 घंटे नहीं हैं, इसलिए यदि कोई s3_signature_version को शामिल करने के तरीके पर थोड़ा और दिशा जोड़ने में सक्षम है: v4 लाइन, यह बहुत अच्छा होगा।

0

माइकल हार्टल के रेल ट्यूटोरियल के बाद अन्य उपयोगकर्ताओं के लिए: आपको (शायद *) को 'धुंध' मणि के कम से कम v 1.26 की आवश्यकता है। तदनुसार अपने जेमफाइल को संशोधित करें, और '$ बंडल इंस्टॉल' को न भूलें।

* कारण यह है कि कुछ एस 3 बाल्टी को प्राधिकरण हस्ताक्षर संस्करण 4 की आवश्यकता होती है।भविष्य में शायद वे सभी, और कम से कम फ्रैंकफर्ट (जोन यू-सेंट्रल -1) को v4 प्रमाणीकरण की आवश्यकता होगी। इस कोहरे v1.26 के बाद से समर्थित किया गया है: https://github.com/fog/fog/blob/v1.26.0/lib/fog/aws/storage.rb

+0

धन्यवाद, मैंने तदनुसार ट्यूटोरियल अपडेट किया है। – mhartl

1

मैं दूसरी दिशा से इस वर्ष सवाल पाया, संस्करण 2 के लिए https://github.com/fog/fog/issues/3450 में सलाह और हस्ताक्षर सेट लेने के लिए (एक परिकल्पना का परीक्षण करने के लिए) की कोशिश कर रहा। into the source a bit में जाने पर, यह पता चला है जादू वाक्यांश :aws_signature_version => 4 है, इसलिए इस तरह:

config.fog_credentials = { 
     # Configuration for Amazon S3 
     :provider    => 'AWS', 
     :aws_access_key_id  => ENV['S3_ACCESS_KEY'], 
     :aws_secret_access_key => ENV['S3_SECRET_KEY'], 
     :aws_signature_version => 4 
    } 
एडब्ल्यूएस एसडीके
संबंधित मुद्दे