我正在尝试将Amazon Simple Storage Service设置为与rails一起使用。我收到此错误消息:

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)


我的问题是,我该怎么做?该代码放在哪里?

编辑:

我尝试按如下方式将:s3_signature_version => :v4放在carrier_wave.rb中,但是在上传到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

最佳答案

我遇到的问题是,Spree v2.3已修复为aws-sdk v1.27.0。但是参数s3_signature_version是在v1.31.0中引入的(中国默认设置)。

因此,在我的情况下,法兰克福的以下配置已被完全忽略:

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

08-04 12:52