我刚刚从paperclip迁移到carrierwave并成功上传到S3以在我的机器上本地工作,但在将Rails应用程序部署到我的服务器(使用Ubuntu,带有nginx的Passenger,是一个任务得到它工作),当我尝试上传图片时,它会尝试将其保存到public / uploads / ...这会产生一个权限被拒绝的错误,我在各处查找并搜索,找出它无法正常工作的原因,并且一无所获。
我的上传器文件:
class AvatarUploader < CarrierWave::Uploader::Base
include CarrierWave::Compatibility::Paperclip
storage :fog
def store_dir
"/uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
end
fog.rb
CarrierWave.configure do |config|
config.storage = :fog
config.fog_credentials = {
provider: 'AWS', # required
aws_access_key_id: '*******', # required
aws_secret_access_key: '********', # required
region: 'ap-southeast-2', # optional, defaults to 'us-east-1'
}
config.fog_directory = 'publicrant' # required
# config.fog_public = false
config.fog_attributes = { 'Cache-Control' => "max-age=#{365.day.to_i}" } # optional, defaults to {}
end
答案 0 :(得分:2)
好吧,经过几个小时的谷歌搜索并找不到惨败找到解决方案,事实证明,在生产环境中,它确实需要将文件暂时放在uploads / tmp中,然后才将其推送到S3 Bucket
答案 1 :(得分:0)
好像你没有其他用户的读取权限(o + r)。检查它使用命令:
namei -lm <absolute path to your current/public>
并授予读取权限:
chmod o+r <directory>
在你的情况下,我认为它将是/home/<user>
目录。