# frozen_string_literal: true desc "Print debug information about post_revisions which cannot be deserialized" task "revisions:debug_deserialization" => :environment do puts "Checking #{PostRevision.count} PostRevision records in batches of 1000... this may take some time..." sleep 1 counts = Hash.new(0) examples = Hash.new() PostRevision.find_each do |revision| revision.modifications rescue Psych::DisallowedClass => e class_name = e.message.sub("Tried to load unspecified class: ", "") counts[class_name] += 1 examples[class_name] ||= revision puts "#{Discourse.base_url}/p/#{revision.post_id} (revision number:#{revision.number} id:#{revision.id}) #{e.message}" end puts puts "Done" puts puts "---- Summary ----" puts "Checked records: #{PostRevision.count}" counts.each_pair { |k, v| puts " #{k}: #{v}" } puts puts "---- Examples ----" puts examples.each_pair do |class_name, revision| puts "-- BEGIN Example #{class_name} --" puts puts revision.modifications_before_type_cast puts puts "-- END Example #{class_name} --" end end