2015-01-08 16 views
5

Tôi đang cố gắng thiết lập Dịch vụ lưu trữ đơn giản của Amazon để sử dụng với đường ray. Tôi nhận được thông báo lỗi này:AWS S3 trong đường ray - cách đặt tham số s3_signature_version

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

Vấn đề là tôi đã chọn vùng S3 S3 và chỉ hỗ trợ lược đồ V4. Đó là thông báo lỗi tương tự như trong this bài đăng, đưa bạn đến giải pháp here, với hướng dẫn cách "đặt tham số: s3_signature_version thành: v4 khi xây dựng ứng dụng khách". Lệnh này là:

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

Câu hỏi của tôi là, làm cách nào để thực hiện việc này? Tôi đặt mã này ở đâu?

EDIT:

Tôi đã thử đưa :s3_signature_version => :v4 trong carrier_wave.rb như sau, nhưng trong quá trình tải lên Heroku nó nói [fog][WARNING] Unrecognized arguments: s3_signature_version, và nó đã không thực hiện bất kỳ sự khác biệt, tôi vẫn nhận được lỗi.

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 

EDIT:

tôi đã tạo ra một cái xô mới sử dụng khu vực miền Bắc California, mà điều này không phải là một vấn đề, nhưng tôi vẫn nhận được chính xác thông báo lỗi tương tự.

EDIT:

này không thực hiện bất kỳ sự khác biệt trong hai:

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

trong mã ruby ​​của bạn với AWS SDK – BMW

+0

Nhưng đó chỉ là nó - Tôi không biết ở đâu. Tôi đặt nó vào tập tin nào? Tôi mới đến AWS, S3 và tất cả những thứ đó và thấy nó khá khó hiểu. - – Bazley

+0

hiện tại tôi chỉ muốn liên kết câu hỏi này cho câu hỏi mà bạn đã yêu cầu hỗ trợ cho AWS https://forums.aws.amazon.com/thread.jspa?threadID=168816 – MZaragoza

Trả lời

3

tôi đã có vấn đề, mà Spree v2.3 đã gắn bó với AWS-sdk v1.27.0. Nhưng thông số s3_signature_version được giới thiệu trong v1.31.0 (và đặt theo mặc định cho Trung Quốc).

Vì vậy, trong trường hợp của tôi cấu hình sau cho Frankfurt đã hoàn toàn bị bỏ qua:

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

Bạn đã đặt mã đó vào ? config/initializers/carrier_wave.rb? – Bazley

+0

Đó là 'config/initializers/paperclip.rb' cho tôi. Nhưng điều đó không quan trọng khi bạn chạy cấu hình đó. – schmijos

0

Tôi có vấn đề này giống nhau và không thể tìm thấy bất kỳ hướng dẫn về nơi để thực hiện các s3_signature_version:: lệnh v4. Cuối cùng, về cơ bản, tôi đã xóa nhóm hiện tại ở Frankfurt và được tạo trên vùng Tiêu chuẩn của Hoa Kỳ và hoạt động (sau khi cập nhật chính sách quyền được đính kèm với người dùng truy cập vào nhóm để phản ánh rằng nhóm đã thay đổi).

Tôi rất thích có thùng ở Frankfurt nhưng tôi không có thêm 16 giờ để chi tiêu vòng tròn với vấn đề này vì vậy nếu ai cũng có thể thêm hướng dẫn về cách kết hợp s3_signature_version: dòng v4, điều đó thật tuyệt.

0

Đối với những người dùng khác theo hướng dẫn của Michael Hartl Rails: bạn (có thể *) cần ít nhất v 1,26 đá quý 'sương mù'. Sửa đổi Gemfile của bạn cho phù hợp, và đừng quên '$ bundle install'.

* lý do là một số nhóm S3 yêu cầu chữ ký ủy quyền phiên bản 4.Trong tương lai có lẽ tất cả chúng sẽ, và ít nhất là Frankfurt (vùng eu-central-1) yêu cầu ủy quyền v4. này đã được hỗ trợ kể từ khi sương mù v1.26: https://github.com/fog/fog/blob/v1.26.0/lib/fog/aws/storage.rb

+0

Cảm ơn, tôi đã cập nhật hướng dẫn cho phù hợp. – mhartl

1

Tôi thấy câu hỏi cũ này từ một hướng khác, cố gắng để có những lời khuyên trong https://github.com/fog/fog/issues/3450 và đặt chữ ký lên phiên bản 2 (để thử nghiệm một giả thuyết). Delving into the source a bit, nó quay ra cụm từ kỳ diệu là :aws_signature_version => 4, vì vậy như thế này:

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 
    } 
Các vấn đề liên quan