追溯性地更改回形针尺寸验证 - >以前的图片现在无效

时间:2017-03-17 14:22:22

标签: ruby-on-rails paperclip paperclip-validation

假设我的模型上有一个回形针附件,其尺寸验证为10GB,一堆用户将图像上传到最大尺寸。

如果我然后将尺寸验证更改为更小的尺寸,例如5GB,则之前上载的任何大于新验证的图像现在都无效。因此,即使尝试触摸模型也会失败,因为此验证失败。在图像上调用reprocess!没有用,因为它只是重新处理styles但没有调整原始图像的大小。

这里可以做些什么来验证不再通过更新,更小尺寸验证的旧图像?

1 个答案:

答案 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!"