生产中的Carrierwave +雾+ aws s3和轨道

时间:2015-03-06 06:24:42

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

我刚刚从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

2 个答案:

答案 0 :(得分:2)

好吧,经过几个小时的谷歌搜索并找不到惨败找到解决方案,事实证明,在生产环境中,它确实需要将文件暂时放在uploads / tmp中,然后才将其推送到S3 Bucket

答案 1 :(得分:0)

好像你没有其他用户的读取权限(o + r)。检查它使用命令:

namei -lm <absolute path to your current/public>

并授予读取权限:

chmod o+r <directory>

在你的情况下,我认为它将是/home/<user>目录。