Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon s3 未定义的方法'sub';零级:零级_Amazon S3_Paperclip_Aws Sdk - Fatal编程技术网

Amazon s3 未定义的方法'sub';零级:零级

Amazon s3 未定义的方法'sub';零级:零级,amazon-s3,paperclip,aws-sdk,Amazon S3,Paperclip,Aws Sdk,在s3中使用回形针时出现以下错误 nil:NilClass的未定义方法'sub' def s3_object style_name = default_style s3_bucket.objects[path(style_name).sub(%r{\A/},'')] end 这是我的has_附件_文件_代码和s3_凭证功能: has_attached_file :avatar, styles: { medium: "300x300>", thumb: "100x100>" },

在s3中使用回形针时出现以下错误

nil:NilClass的未定义方法'sub'

def s3_object style_name = default_style
  s3_bucket.objects[path(style_name).sub(%r{\A/},'')]
end
这是我的has_附件_文件_代码和s3_凭证功能:

has_attached_file :avatar, styles: { medium: "300x300>", thumb: "100x100>" }, 
                         default_url: "/images/:style/missing.png", 
                         default_style: :medium,
                         storage: :s3,
                         s3_credentials: Proc.new{|a| a.instance.s3_credentials }
validates_attachment_content_type :avatar, content_type: /\Aimage\/.*\Z/


def s3_credentials
{
  :s3_region => 'us-east-1',
  :bucket => "qlinkus-profile-photos", 
  :access_key_id => Rails.application.secrets.aws_access_key, 
  :secret_access_key => Rails.application.secrets.aws_secret_key
}
结束

我已将以下宝石添加到我的gemfile中:

gem "paperclip", git: "git://github.com/thoughtbot/paperclip.git"
gem 'aws-sdk', ">=2.0.0"

这意味着变量“style_name”为nil。可能它没有传递到默认值中,使用了“default_style”,这似乎是一个符号。路径的返回值是多少?我会检查“stye_name”变量,看看它的值是什么。

我刚刚在aws sdk v2中使用了最新的回形针。以下代码适用于我:

has_attached_file :doc, 
    default_url: "/images/:style/missing.png",
    storage: :s3,
    s3_credentials: Proc.new{|a| a.instance.s3_credentials },
    s3_permissions: :private,
    s3_region: ENV["AWS_REGION"]

  validates_attachment_content_type :doc, :content_type => ['image/png','image/jpg']

  def s3_credentials
    {:bucket => ENV['AWS_S3_BUCKET'], :access_key_id => ENV['AWS_KEY_ID'], :secret_access_key => ENV['AWS_KEY_SECRET']}
  end
唯一不同的是s3_区域。回形针有单独的配置键。这里没有提到:

但当我查看github repo时,我发现:


希望有帮助

好的,有几件事

首先,文件甚至没有上传到我的服务器上,因为我没有设置特定文件夹的权限。所以Rails为所有图片获取了一个空白路径,这可能导致了这个错误,因为路径(style_name)返回nil

即使修复了此问题,文件也无法上传。在我将以下选项添加到has_attached_文件后,它得到了修复:

s3_permissions: 'public-read'
我以为默认情况下,权限设置为公共阅读,结果我错了