2012-04-07 53 views
10

我正在將我的應用程序從Rails 3.0.9遷移到3.2.3和ruby 1.9.3。我用aws-s3 gem使用回形針(2.3.11)來存儲我的照片。Errors :: SignatureDoesNotMatch,適用於回形針3.0.1和rails 3.2的S3支持的AWS-SDK gem

現在我想使用最後一個版本的回形針(3.0.1),然後我必須使用aws-sdk gem。

我已經把我的aws.yml文件:

development: &development 
     bucket: bucket_name_for_dev 
     access_key_id: ***** 
     secret_access_key: ******* 
    staging: 
     <<: *development 
     bucket: bucket_name_for_staging 

    production: 
     <<: *development 
     bucket: bucket_name_for_prod 

我的模型包括:

has_attached_file :picture, :styles => { :medium => "300x300>", :thumb => "50x50>" }, :default_url => 'picture_missing.png', 
     :storage => :s3, 
     :bucket => "bucket_name_for_dev", 
     :s3_credentials => Rails.root.join("config/aws.yml"), 
     :path => "/presentation_pictures/:id/:style/:filename", 
     :url => ":s3_eu_url" 

    attr_accessible :picture 
    attr_accessor :picture_url 

當試圖上傳文件,我得到的錯誤:

AWS::S3::Errors::SignatureDoesNotMatch The request signature we calculated does not match the signature you provided. Check your key and signing method.

我驗證過在我的鑰匙可以訪問和設置爲正確的價值。

這裏也是我從控制檯中看到:

[paperclip] Saving attachments. 
    [paperclip] saving /presentation_pictures/43/original/Image_1.png 
    [AWS S3 200 0.813272 0 retries] put_object(:acl=>:public_read,:bucket_name=>"*******_dev",:content_type=>"image/png",:data=>#<Paperclip::UploadedFileAdapter:0x2e144b4 @target=#<ActionDispatch::Http::UploadedFile:0x2dbb1fc @original_filename="Image 1.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"presentation_picture[picture]\"; filename=\"Image 1.png\"\r\nContent-Type: image/png\r\n", @tempfile=#<File:/var/folders/tb/tbmv4LE9EwGNPr1QqU2S0E+++TI/-Tmp-/RackMultipart20120407-33502-1gajfe9>>, @tempfile=#<File:/var/folders/tb/tbmv4LE9EwGNPr1QqU2S0E+++TI/-Tmp-/Image 1.png20120407-33502-an4dcy>>,:key=>"presentation_pictures/43/original/Image_1.png") 

你有沒有從那裏可以來這個問題的任何想法? Thx

+0

我沒有答案,但可以發佈您的aws-sdk和aws-s3 Gemfile.lock的版本?我試圖弄清楚爲什麼這也開始發生在我身上。 – 2012-04-19 18:06:12

回答

1

好像你不能以正確的方式訪問你的aws。您必須指定您的主機名,特別是在非美國地區使用存儲桶時。嘗試使用

:s3_host_name => 's3-eu-west-1.amazonaws.com' 

您的has_attached_file選項。

如果你已經配置了你S3使用https還添加

:s3_protocol => 'https' 

如果沒有,就忽視它。

如果你的水桶是一個私人性質,加

:s3_permissions => :private 

你也不需要明確地配置您的水桶中的選項參數,因爲你已經在你的aws.yml宣佈它與通過:s3_credentials => Rails.root.join("config/aws.yml")進行設置。

希望這會有所幫助。

10

我有同樣的問題。事實證明,我正在使用正確的訪問密鑰ID,但我的密鑰複製不正確。

雙重檢查我的密鑰並更正它爲我解決了它。

+2

是......兩次點擊,複製和粘貼可能導致有趣的結果AWS使用將密鑰分解爲單獨單詞的字符。 – Jerome 2014-08-29 07:46:35

+0

同樣的問題在這裏 – sixty4bit 2015-08-06 16:58:39

+0

是的,很容易錯過。 – yekta 2016-03-21 14:42:07

1

我的錯誤是以訪問密鑰而不是用戶訪問密鑰。 AWS最近更改了它,因此您必須爲自己創建一個AIM用戶,然後使用該用戶的訪問密鑰(而不是root)

相關問題