我正在尝试将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
)