未定义的方法`sub'为零:NilClass

时间:2016-01-25 07:34:19

标签: amazon-s3 paperclip aws-sdk

使用带有s3的回形针时,我收到以下错误。

未定义的方法`sub'为零:NilClass

def s3_object style_name = default_style
  s3_bucket.objects[path(style_name).sub(%r{\A/},'')]
end

这是我的has_attached_file_code& s3_credentials函数:

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"

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

好的还有几件事。

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

即使在修复此文件后,该文件也未上传。我将以下选项添加到has_attached_file后得到修复:

s3_permissions: 'public-read'

我认为默认情况下,权限设置为public-read,原来我错了。

答案 2 :(得分:0)

我刚用过最新的回形针和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_region。 Paperclip具有单独的配置键。这里没有提到:http://www.rubydoc.info/github/thoughtbot/paperclip/Paperclip/Storage/S3

但是当我看着github repo时,我发现它: https://github.com/thoughtbot/paperclip/blob/master/lib/paperclip/storage/s3.rb#L219

希望有所帮助!!