一切都在本地按预期工作。一旦我推送到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上导致问题的原因是什么,而不是在本地?
答案 0 :(得分:2)
Forbidden可能意味着配置目录(而不是其他凭据)存在问题。您是在本地还是在Heroku上使用相同的BUCKET_NAME
值?我知道我当然试图使用我尚未创建的不同存储桶(可能也会出现此错误)。所以检查值是你期望的(并且存储桶已经存在)是一个很好的起点。如果不能解决这个问题,我当然很乐意讨论并继续提供帮助。