2012-04-07 49 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)

相关问题