假设我的模型上有一个回形针附件,其尺寸验证为10GB,一堆用户将图像上传到最大尺寸。
如果我然后将尺寸验证更改为更小的尺寸,例如5GB,则之前上载的任何大于新验证的图像现在都无效。因此,即使尝试触摸模型也会失败,因为此验证失败。在图像上调用reprocess!
没有用,因为它只是重新处理styles
但没有调整原始图像的大小。
这里可以做些什么来验证不再通过更新,更小尺寸验证的旧图像?
答案 0 :(得分:0)
结束只使用imagemagick直接编写脚本来调整现有图像的大小(一次50%),然后重新保存。假设型号名称为Model
,回形针附件为picture
:
puts "Finding and resizing images from models..."
invalid_models = Model.where("picture_file_size > 10_000_000")
puts "Found #{invalid_models.count} models with oversized images"
invalid_models.each do |m|
puts "Model #{m.id} has image with size #{m.picture.size}"
while(!m.valid?) do
puts "\tShrinking by 50%..."
tmp_filename = "/tmp/#{m.picture_file_name}"
%x(convert #{m.picture.url} -resize 50% #{tmp_filename})
m.picture = open(tmp_filename)
m.save(validate: false) # skip validations in case it's still too large
puts "\tNew size=#{m.picture.size}, valid?=#{m.valid?}"
end
end
puts "Done!"