首页 文章

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

提问于
浏览
2

一切都在本地按预期工作 . 一旦我推送到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 没有错误 .

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

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

1 回答

  • 2

    Forbidden可能意味着配置目录(而不是其他凭据)存在问题 . 你在本地和Heroku上使用相同的 BUCKET_NAME 值吗?我知道我虽然为你解决了这个问题 .

相关问题