attachment_fu resizing images already uploaded

hi, got a query.

i'm using the attachment_fu plugin to handle photo storage and that's working fine, however now i've come to realise the initial size i set the thumbnails and full photos isn't right, so i've changed the sizing for future uploads but need to do this for past uploads.

any ideas how i'd do this, maybe in a migration or rake task?

i'm thinking i could build a task to reimport each full photo, after which it deletes the original record, which is do-able.

just wondering if there's any magic method i'm missing to do it better?

appreciate any replies on this,

since you most likely have to do it only once, you can do it in script/console.

Either write a small script for that task and start it in the console. Or add a method to the model that contains the data and start that within te console.

I eventually managed to get the time to put this one together, rake script below...

#(run => 'rake images:[task]' or 'rake RAILS_ENV=production images:[task]')

namespace :images do   desc "list images"   task(:list => :environment) do     # list all images     @photos = Image.find(:all, :conditions => ['parent_id is null'])     @photos.each do |@photo|       iFile = @photo.filename #@photo.public_filename       iPath = RAILS_ROOT+"/public#{@photo.public_filename}"       iID = @photo.id.to_s       iUser_ID = @photo.user_id.to_s       iWidth = @photo.width.to_s       iHeight = @photo.height.to_s       puts 'id:'+iID+' userid:'+iUser_ID+' width:'+iWidth+' height:'+iHeight+' file:'+iFile+' path:'+iPath     end   end

  desc "add test image"   task(:add_test => :environment) do     # add image     iFile = 'test2.jpg'     iPath = '/var/www/apps/dates/test.jpg'     @img = Image.new(:filename => iFile, :content_type => 'image/jpeg', :temp_path => iPath, :user_id => 1).save!   end

  desc "update test image"   task(:update_test => :environment) do     # update image     iFile = 'test2.jpg'     iPath = '/var/www/apps/dates/test2.jpg'     @img = Image.find('101')     if @img.update_attributes(:filename => iFile, :content_type => 'image/jpeg', :temp_path => iPath, :user_id => 1)       puts iFile + ' updated!'     end   end

  desc "reimage all existing images - test"   task(:reimage_test => :environment) do     # re-import all existing images - test     @photos = Image.find(:all, :conditions => ['parent_id is null and user_id = 2'])     @photos.each do |@photo|       iFile = @photo.filename       iPath = RAILS_ROOT+"/public#{@photo.public_filename}"       iType = @photo.content_type       iUser_ID = @photo.user_id       if @photo.update_attributes(:filename => iFile, :content_type => iType, :temp_path => iPath, :user_id => iUser_ID)         puts iFile + ' updated!'       end     end   end

  desc "reimage all existing images"   task(:reimage => :environment) do     # re-import all existing images     @photos = Image.find(:all, :conditions => ['parent_id is null'])     @photos.each do |@photo|       iFile = @photo.filename       iPath = RAILS_ROOT+"/public#{@photo.public_filename}"       iType = @photo.content_type       iUser_ID = @photo.user_id       if @photo.update_attributes(:filename => iFile, :content_type => iType, :temp_path => iPath, :user_id => iUser_ID)         puts iFile + ' updated!'       end     end   end

end

it's a bit quick & dirty but it does the job.

all the best,

John.