2012-04-07 24 views
10

Tôi đang di chuyển ứng dụng của mình từ Rails 3.0.9 đến 3.2.3 và ruby ​​1.9.3. Tôi đã sử dụng kẹp giấy (2.3.11) với đá quý aws-s3 để lưu trữ hình ảnh của tôi.Lỗi :: Đá quý SignatureDoesNotMatch, AWS-SDK hỗ trợ S3 trên kẹp giấy 3.0.1 và đường ray 3.2

Bây giờ tôi muốn sử dụng phiên bản cuối cùng của kẹp giấy (3.0.1) và sau đó tôi phải sử dụng đá quý aws-sdk.

tôi đã thiết lập tập tin aws.yml tôi như:

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 

mô hình của tôi chứa:

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 

Khi cố gắng để tải lên một tập tin, tôi nhận được thông báo lỗi:

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

Tôi đã xác minh lần thứ tại các phím của tôi có thể truy cập và được đặt thành giá trị phù hợp.

Đây cũng là những gì tôi nhận được từ giao diện điều khiển:

[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") 

Bạn có bất cứ ý tưởng từ nơi có thể đến vấn đề này? Thx

+0

Tôi không có câu trả lời cho bạn nhưng bạn có thể đăng aws-sdk và aws-s3 phiên bản từ Gemfile.lock? Tôi đang cố gắng tìm ra lý do tại sao điều này cũng bắt đầu xảy ra với tôi. –

Trả lời

1

Có vẻ như bạn không thể truy cập vào aws đúng cách. Bạn phải chỉ định tên máy chủ lưu trữ của mình, đặc biệt là khi sử dụng nhóm trong khu vực không phải của Hoa Kỳ. Hãy thử sử dụng

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

trong các tùy chọn has_attached_file của bạn.

Nếu bạn đã cấu hình S3 của bạn để sử dụng https cũng thêm

:s3_protocol => 'https' 

nếu không, chỉ cần bỏ qua nó.

Và nếu xô của bạn là một trong những cá nhân, thêm

:s3_permissions => :private 

Bạn cũng không cần phải cấu hình một cách rõ ràng xô của bạn trong tham số tùy chọn, như bạn đã tuyên bố nó trong aws.yml của bạn và đặt nó qua :s3_credentials => Rails.root.join("config/aws.yml").

Hy vọng điều này sẽ hữu ích.

10

Tôi gặp vấn đề tương tự. Hóa ra tôi đã sử dụng id khóa truy cập chính xác nhưng khóa bí mật của tôi đã được sao chép không chính xác.

Kiểm tra kỹ khóa bí mật của tôi và sửa nó đã sửa nó cho tôi.

+2

Yep ... nhấp 2 lần, sao chép và dán có thể dẫn đến kết quả buồn cười AWS sử dụng các ký tự chia nhỏ khóa đó thành các từ riêng biệt. – Jerome

+0

cùng một vấn đề ở đây – sixty4bit

+0

Vâng, dễ bỏ lỡ. – yekta

1

Lỗi của tôi là lấy số gốc khóa truy cập thay vì người dùng khóa truy cập. AWS đã thay đổi nó gần đây để bạn phải tạo một người dùng AIM cá nhân cho chính mình, và sau đó sử dụng khóa truy cập của người dùng đó (không phải root)

Các vấn đề liên quan