2017-03-17 8 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!"