使用Carrierwave和Fog将Heroku上的图像上传到S3时出现403错误

时间:2013-08-22 18:32:14

标签: ruby-on-rails heroku amazon-s3 carrierwave fog

一切都在本地按预期工作。一旦我推送到heroku,我就无法再上传图片了。

我从heroku日志获得的错误代码是: Excon::Errors::Forbidden (Expected(200) <=> Actual(403 Forbidden)

XML响应包含:<Code>AccessDenied</Code><Message>Access Denied</Message>

我的fog.rb

CarrierWave.configure do |config|
  config.fog_credentials = {
    :provider               => 'AWS',
    :aws_access_key_id      => ENV["ACCESS_KEY_ID"],
    :aws_secret_access_key  => ENV["SECRET_ACCESS_KEY"]
    #:region                 => 'eu-west-1'
  }

  #Required for Heroku
  config.cache_dir = "#{Rails.root}/tmp/uploads"

  config.fog_directory = ENV["BUCKET_NAME"]

end

我的上传者:

class ImageUploader < CarrierWave::Uploader::Base
    storage :fog
    def store_dir 
        "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
    end
end

Heroku有正确的环境变量 - 我使用了figaro gem。我在前几次获得403后手动设置它们以确保figaro没有错误。

我认为这可能是该地区的问题,但我的存储桶是美国,载波文档说默认为us-east-1

在Heroku上导致问题的原因是什么,而不是在本地?

1 个答案:

答案 0 :(得分:2)

Forbidden可能意味着配置目录(而不是其他凭据)存在问题。您是在本地还是在Heroku上使用相同的BUCKET_NAME值?我知道我当然试图使用我尚未创建的不同存储桶(可能也会出现此错误)。所以检查值是你期望的(并且存储桶已经存在)是一个很好的起点。如果不能解决这个问题,我当然很乐意讨论并继续提供帮助。