我在我的项目中使用回形针进行图像上传。我已经覆盖了默认路径
(path: ':class/:id/:attachment/:basename.:extension'
)。因为我错过了路径名称的样式,现在我需要为image添加缩略图。现在我已经改变了路径(
config.paperclip_defaults = {
styles: { thumb: "40x40" },
path: ':class/:id/:attachment/:style/:basename.:extension',
url: ':class/:id/:attachment/:style/:basename.:extension'}
)有风格,我在S3上传了图片。 当我为以前上传的文件运行paperclip rake任务时,它会显示以下错误
NoMethodError: undefined method `match' for nil:NilClass.
当我通过控制台尝试重新处理方法时,
User Load (1.0ms) SELECT "users".* FROM "users" WHERE "users"."deleted_at" IS NULL ORDER BY "users"."id" DESC LIMIT $1 [["LIMIT", 1]]
[paperclip] copying users/100000/profile_picture/Screen_Shot_2018-03-13_at_3.46.34_PM.png to local file /var/folders/f_/rp805gln2p7_1z0prxsw7www00015k/T/2bfc1b167915d853fafaa0a3ef5d83d220180319-5563-1cqfhvv.png
NoMethodError: undefined method `match' for nil:NilClass
答案 0 :(得分:0)
假设您使用rake paperclip:refresh CLASS=User
为已创建的图片创建版本。您可以查看更多选项here。
但是您当前对模型所做的更改不会让您这样做,因为您已将路径从path: ':class/:id/:attachment/:basename.:extension'
更改为path: ':class/:id/:attachment/:style/:basename.:extension'
。
您已创建的图片位于abc/123/attachement_name/basename.:extension
之类的路径上。但在您更改回形针后,请在abc/123/attachement_name/origional/basename.:extension
中查找。
您可以使用here中的rake任务。在进行最小的更改后,它将解决您的问题。
namespace :paperclip do
desc "Recreate attachments and save them to new destination"
task :move_attachments => :environment do
Model.find_each do |model|
unless model.image_file_name.blank?
filename = Rails.root.join('public', 'system', 'images', model.id.to_s, model.image_file_name)
if File.exists? filename
#image = File.new filename
model.remote_image_url = filename
model.save
model.image.reprocess!
image.close
end
end
end
end
end
将Model
替换为您的型号名称和带附件名称的图片,一切都会有效。