Skip to content

Instantly share code, notes, and snippets.

@robban
Created March 11, 2012 15:29
Show Gist options
  • Select an option

  • Save robban/2016821 to your computer and use it in GitHub Desktop.

Select an option

Save robban/2016821 to your computer and use it in GitHub Desktop.

Revisions

  1. robban created this gist Mar 11, 2012.
    51 changes: 51 additions & 0 deletions convert_images_to_paperclip.rb
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,51 @@
    class ConvertImagesToPaperclip

    def self.convert_all

    # Update table information
    Photo.reset_column_information

    # Delete all attachement_fu image sizes
    Photo.delete_all("parent_id IS NOT NULL")

    # Migrate data
    Photo.all.each do |photo|
    populate_paperclip_from_attachment_fu(photo, photo, 'photo', 'photos') if photo
    photo.photo.reprocess! if photo.photo
    end

    end


    def self.populate_paperclip_from_attachment_fu(model, attachment, prefix, path_prefix)
    unless attachment.photo_file_name.nil?
    # The columns have already been renamed by migration
    #model.send("#{prefix}_file_name=", attachment.photo_filename)
    #model.send("#{prefix}_content_type=", attachment.content_type)
    #model.send("#{prefix}_file_size=", attachment.size)
    puts "# data_file_name: #{model.send("#{prefix}_file_name")}"
    puts "# data_content_type: #{model.send("#{prefix}_content_type")}"
    puts "# data_file_size: #{model.send("#{prefix}_file_size")}"

    # Get file path from attachment_fu
    file_path = ("%08d" % model.id).scan(/..../).join('/')
    old_path = File.join(Rails.root, 'public', path_prefix, file_path, attachment.photo_file_name)
    # Need to use URI::decode to handle files with åäö in
    new_path = model.send(prefix).path(:original)
    new_folder = File.dirname(new_path)

    if File.exists?(old_path)
    unless File.exists?(new_folder)
    FileUtils.mkdir_p(new_folder)
    end

    puts "Copying #{old_path} to #{new_path}"
    system("cp #{old_path} #{new_path}")
    model.save
    else
    puts "No such file: #{old_path}"
    end
    end
    end

    end