nil:NilClass 的未定义方法“sub”
undefined method `sub' for nil:NilClass
在 s3 中使用回形针时出现以下错误。
nil:NilClass 的未定义方法“sub”
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
}
结束
我将以下 gem 添加到我的 gemfile 中:
gem "paperclip", git: "git://github.com/thoughtbot/paperclip.git"
gem 'aws-sdk', ">=2.0.0"
这意味着变量 "style_name" 为 nil。也许它没有传递默认值 "default_style" 被使用这似乎是一个符号。路径中的 return 值是多少?我会检查 "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_region。 Paperclip 有单独的配置密钥。这里没有提到:http://www.rubydoc.info/github/thoughtbot/paperclip/Paperclip/Storage/S3
但是当我查看 github 回购协议时,我发现了它:
https://github.com/thoughtbot/paperclip/blob/master/lib/paperclip/storage/s3.rb#L219
希望对您有所帮助!!
好的,有几件事。
首先,该文件甚至没有上传到我的服务器,因为我没有为该特定文件夹设置权限。所以 Rails 得到所有图片的空白路径,这可能导致此错误,因为 path(style_name) 返回 nil。
即使在修复此问题后,文件仍未上传。在我向 has_attached_file 添加以下选项后它得到修复:
s3_permissions: 'public-read'
我还以为默认权限是public-read,原来我错了。
在 s3 中使用回形针时出现以下错误。
nil:NilClass 的未定义方法“sub”
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
}
结束
我将以下 gem 添加到我的 gemfile 中:
gem "paperclip", git: "git://github.com/thoughtbot/paperclip.git"
gem 'aws-sdk', ">=2.0.0"
这意味着变量 "style_name" 为 nil。也许它没有传递默认值 "default_style" 被使用这似乎是一个符号。路径中的 return 值是多少?我会检查 "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_region。 Paperclip 有单独的配置密钥。这里没有提到:http://www.rubydoc.info/github/thoughtbot/paperclip/Paperclip/Storage/S3
但是当我查看 github 回购协议时,我发现了它: https://github.com/thoughtbot/paperclip/blob/master/lib/paperclip/storage/s3.rb#L219
希望对您有所帮助!!
好的,有几件事。
首先,该文件甚至没有上传到我的服务器,因为我没有为该特定文件夹设置权限。所以 Rails 得到所有图片的空白路径,这可能导致此错误,因为 path(style_name) 返回 nil。
即使在修复此问题后,文件仍未上传。在我向 has_attached_file 添加以下选项后它得到修复:
s3_permissions: 'public-read'
我还以为默认权限是public-read,原来我错了。