使用 Paperclip 将图像上传到 Amazon S3 时权限被拒绝

Permission denied when uploading image to Amazon S3 with Paperclip

我正在使用 Devise 进行帐户管理,并使用 Paperclip 将图像上传到 Amazon S3。 Devise 工作正常,但是当我尝试上传图片时,出现以下错误:

Errno::EACCES in Devise::RegistrationsController#update
Permission denied @ dir_s_mkdir - /users/avatars

这是我的代码:

user.rb

class User < ActiveRecord::Base
  devise :confirmable, :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable
  has_attached_file :avatar, 
                    :bucket => ENV["S3_BUCKET"],
                    :url => ':s3_domain_url',
                    :path => '/:class/:attachment/:id_partition/:style/:filename',
                    :styles => { 
                      :square => '200x200'
                    }, 
                    :default_url => "missing_avatar.png"


  validates_attachment_content_type :avatar, :content_type => /\Aimage\/.*\Z/
end

我正在使用

配置 Paperclip
config.paperclip_default = {
  :storage => :s3,
  :s3_credentials => {
    :bucket => ENV['S3_BUCKET_NAME'],
    :access_key_id => ENV['AWS_ACCESS_KEY_ID'],
    :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
  }
}

并允许 :avatar

devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:username, :email, ..., :avatar) }

如果我从 has_attached_file 中的 :path 选项中去掉前导斜线,则不会抛出错误,但也不会上传图片。

非常感谢!

一如既往,非常简单的答案:

Errno::EACCES in Devise::RegistrationsController#update
Permission denied @ dir_s_mkdir - /users/avatars

当 Paperclip 试图写入本地文件系统(从未使用 s3)时被抛出。 :storage => :s3 从来没有做任何事情,因为我有 paperclip_default 而不是 paperclip_defaults。该死的。