使用Amazon S3进行载波上传-403禁止的错误

sci*_*fic 1 ruby-on-rails amazon-s3 carrierwave

我试图在我的Rails应用程序中将Carrierwave与Amazon S3结合使用,但不断出现错误

"Excon::Errors::Forbidden (Expected(200) <=> Actual(403 Forbidden)."  
<Error><Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.
Run Code Online (Sandbox Code Playgroud)

我也收到警告

"[WARNING] fog: the specified s3 bucket name() is not a valid dns name, which will negatively impact performance.  For details see: http://docs.amazonwebservices.com/AmazonS3/latest/dev/BucketRestrictions.html"  
Run Code Online (Sandbox Code Playgroud)

config / initializers / carrierwave.rb:

CarrierWave.configure do |config|
  config.fog_credentials = {
    provider: 'AWS',                      
    aws_access_key_id: ENV["AWS_ACCESS_KEY_ID"],
    aws_secret_access_key: ENV["AWS_ACCESS_KEY"]
  }
  config.fog_directory = ENV["AWS_BUCKET"]                
end
Run Code Online (Sandbox Code Playgroud)

我的存储桶名称是“ buildinprogress”

我仔细检查了我的访问密钥ID和访问密钥是否正确。

如何解决此错误?

bln*_*lnc 5

这是Fog / Excom的问题,它也一直对我抛出随机错误。

我的解决方法是删除宝石“雾”,而改为宝石“ carrierwave-aws”

然后,在您的* _uploader.rb中进行更改

storage :fog ---> storage :aws
Run Code Online (Sandbox Code Playgroud)

并更新您的carrierwave.rb文件,例如:

  CarrierWave.configure do |config|
    config.storage    =  :aws                  # required
    config.aws_bucket =  ENV['S3_BUCKET']      # required
    config.aws_acl    =  :public_read

    config.aws_credentials = {
      access_key_id:      ENV['S3_KEY'],       # required
      secret_access_key:  ENV['S3_SECRET']     # required
    }

    config.aws_attributes = {
                              'Cache-Control'=>"max-age=#{365.day.to_i}",
                              'Expires'=>'Tue, 29 Dec 2015 23:23:23 GMT'
                            }
  end
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请查看carrierwave-aws GitHub页面