rails中的AWS S3 - 如何设置s3_signature_version参数

Baz*_*ley 7 ruby-on-rails amazon-s3 amazon-web-services

我正在尝试设置Amazon Simple Storage Service以用于rails.我收到此错误消息:

The authorization mechanism you have provided is not supported. Please use AWS4-HMAC-SHA256.
Run Code Online (Sandbox Code Playgroud)

问题是我选择了法兰克福S3区域,并且只支持V4方案.这是在相同的错误消息这个职位,这将指导您解决 在这里,讲解如何"的设置:s3_signature_version参数:构建客户端时V4".命令是:

s3 = AWS::S3::Client.new(:s3_signature_version => :v4)
Run Code Online (Sandbox Code Playgroud)

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

编辑:

我尝试:s3_signature_version => :v4按如下方式放入carrier_wave.rb,但在上传到heroku期间,它说[fog][WARNING] Unrecognized arguments: s3_signature_version,并没有任何区别,我仍然得到错误.

配置/初始化/ 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
Run Code Online (Sandbox Code Playgroud)

编辑:

我已经使用北加利福尼亚地区创建了一个新的存储桶,为此不应该是一个问题,但我仍然得到完全相同的错误消息.

编辑:

这也没有任何区别:

    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
Run Code Online (Sandbox Code Playgroud)

sch*_*jos 6

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

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

AWS.config(
    region: 'eu-central-1',
    s3_signature_version: :v4
)
Run Code Online (Sandbox Code Playgroud)