namespace :epp do desc 'EPP actions' task all: :environment do Rake::Task['epp:trim_documents'].invoke end desc 'Trim logs' task trim_documents: :environment do puts '-----> Running query' start = Time.zone.now.to_f i = 0 ids = [] count = 0 ApiLog::EppLog .where("request ~* ?", '') .where("request NOT LIKE ?", "%[FILTERED]%") .where("request NOT LIKE ?", '%%').find_each(batch_size: 1000)do |x| trimmed = x.request.gsub(/]+)>([^<])+<\/eis:legalDocument>/, "[FILTERED]") x.request = trimmed x.save and count += 1 and i += 1 and ids.push x.id if i == 500 puts "-----> Total rows updated #{count}" puts "Last #{i} rows ids #{ids.join(', ')}" i = 0 ids = [] end end puts "-----> Total rows updated #{count}" puts "Last #{count} rows ids #{ids.join(', ')}" puts "-----> Query done total #{(Time.zone.now.to_f - start).round(2)} seconds" end end