无法通过使用carrierwave和heroku的rails应用程序将图像上传到AWS

时间:2013-10-02 16:37:55

标签: heroku amazon-s3 carrierwave

我在Heroku日志中遇到以下错误: -

Excon :: Errors :: Forbidden(Expected(200)< => Actual(403 Forbidden) 2013-10-02T16:25:51.131316 + 00:00 app [web.1]:response => #“\ n InvalidAccessKeyId您提供的AWS访问密钥ID不存在于我们的记录中.5CA6A058BCE5D28AQ6grl4LPNO + F9YVtJZA7YIASYUFw4IpggAVlMJEzsdAhdwSWOTIB8K + VolEwyGYLS3_KEY”,: headers => {“x-amz-request-id”=>“5CA6A058BCE5D28A “,”x-amz-id-2“=>”Q6grl4LPNO + F9YVtJZA7YIASYUFw4IpggAVlMJEzsdAhdwSWOTIB8K + VolEwyGYL“,”Content-Type“=>”application / xml“,”Transfer-Encoding“=>”chunked“,”Date“ “=>”星期三,2013年10月2日16:25:50 GMT“,”连接“=>”关闭“,”服务器“=>”AmazonS3“},:status => 403,:remote_ip =&gt ;“176.32.100.200”},@ body =“\ n InvalidAccessKeyId您提供的AWS访问密钥ID不在我们的记录中.5CA6A058BCE5D28AQ6grl4LPNO + F9YVtJZA7YIASYUFw4IpggAVlMJEzsdAhdwSWOTIB8K + VolEwyGYL

我已经检查了AWS密钥至少十几次。 我使用以下命令设置了Heroku变量:

heroku config:add S3_KEY=XXXXXXXXXXXXXXX S3_SECRET=XXXXXXXXXXXXXXXXXXXXXX

但是我得到了上面的错误。

2 个答案:

答案 0 :(得分:1)

您的AWS访问密钥似乎无效。要仔细检查几件事:

  • 您的访问密钥,密钥和存储桶是否都与AWS信息中心中的内容相匹配?

  • 您是否在carrierwave初始化程序中正确设置了这些变量?您应该可以通过从heroku run rails console CarrierWave.configure { |config| puts config.fog_credentials; puts config.fog_directory }运行以下内容来进行检查。

如果你加倍检查那些并且确实没有任何问题,那么你的S3帐户可能会遇到一个奇怪的问题(你可以使用相同的凭证访问另一个S3实用程序的S3帐户吗?),或者有你的代码中发生了一些疯狂的事情。

祝你好运!

答案 1 :(得分:0)

我能够弄清楚使用Taavo的建议。我使用figaro gem将AWS凭据放入config / application.yml。

此外,我还更改了我的carrierwave.rb文件:

CarrierWave.configure do |config|

  config.fog_credentials = {
    provider: "AWS",
    aws_access_key_id: "S3_KEY",
    aws_secret_access_key: "S3_SECRET",

  }
  config.cache_dir = "#{Rails.root}/tmp/uploads" 
  config.fog_directory = "S3_BUCKET_NAME"
  config.fog_public = false
  config.fog_attributes = {'Cache-Control'=>'max-age=315576000'}
end

CarrierWave.configure do |config|

  config.fog_credentials = {
    provider: "AWS",
    aws_access_key_id: ENV["S3_KEY"],
    aws_secret_access_key: ENV["S3_SECRET"],
    #region: 'Northern California'

  }
  config.cache_dir = "#{Rails.root}/tmp/uploads" 
  config.fog_directory = ENV["S3_BUCKET_NAME"]
  config.fog_public = false
  config.fog_attributes = {'Cache-Control'=>'max-age=315576000'}
end

然后在Heroku中添加了以下内容:

$ heroku config:set S3_BUCKET_NAME=your_bucket_name
$ heroku config:set S3_KEY=your_access_key_id
$ heroku config:set S3_SECRET=your_secret_access_key

这就完成了工作。感谢Taavo的建议。