namespace :uploader do task :recreate => :environment do mongoid_collections = Mongoid.database.collections.reject{|c| c.name.include?('.')} ARGV.shift if ARGV.present? uploaders = [] ARGV.each{ |arg| task arg.to_sym do ; end uploaders << arg } else uploaders = %w(AvatarUploader ImageUploader) end klasses = mongoid_collections.inject([]) { |klasses, coll| if klasses.blank? klasses = coll.find().map{|c| c['_type']}.uniq.compact else klasses += coll.find().map{|c| c['_type']}.uniq.compact end klasses } to_recreate = klasses.inject([]) { |names, name| klass = name.constantize rescue nil klass.uploaders.each_value{ |value| if uploaders.include?(value.to_s) && !names.include?(name) names << name end } unless klass.nil? names } to_recreate.each { |name| klass = name.constantize klass.all.each{ |object| klass.uploaders.each_key{ |key| object.send(key).recreate_versions! if object[key] rescue nil } } } end end