2017-03-17 1 views
0

モデルにサイズクリップを添付してサイズの検証が10GBで、ユーザーの束がその最大サイズまで画像をアップロードしているとします。サイズ変更を遡及的に変更する - >以前の画像が無効になりました

次にサイズの確認を5GBなどと変更すると、以前にアップロードされた新しい確認の画像が無効になります。したがって、この検証が失敗するため、モデルに触れようとしても失敗します。画像にreprocess!を呼び出すと、stylesを再処理するだけで元の画像のサイズは変更されないため、問題はありません。

ここで、新しいサイズチェックをパスしなくなった古い画像を検証するにはどうすればよいですか?

答えて

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!" 
関連する問題