Avatars nach dem Import fehlen

Ich habe einen vBulletin-Import für einen gehosteten Kunden durchgeführt. Die Avatare sind verschwunden und werden nun als generische leere Personensilhouette angezeigt, wie hier.

Ich bin mir ziemlich sicher, dass sie irgendwann vorhanden waren. Die URLs sehen so aus, als ob sie Inhalte enthalten müssten. Gibt es eine Möglichkeit, sie wiederzufinden?

Maybe related to that?

Do you have a backup where you can check the URL?
Are they in the tombstone?

I did a fresh import and all of the avatars are missing. Sidekiq still has 13M things to process, but I don’t see how that could be the problem. I did another import on another site with what I believe to be the same import script and the avatars are fine there.

pry(main)> User.find_by_username('MysteryManAvatar').uploaded_avatar
=> #<Upload:0x0000558a0d31b478
 id: 97,
 user_id: 114,
 original_filename: "clevername.jpg",
 filesize: 2028,
 width: 90,
 height: 67,
 url: "/uploads/default/original/1X/080817dcf59ddc838054fba9716b62fce9ae3d83.jpg",
 created_at: Thu, 19 Apr 2018 23:51:15 UTC +00:00,
 updated_at: Thu, 19 Apr 2018 23:51:15 UTC +00:00,
 sha1: "080817dcf59ddc838054fba9716b62fce9ae3d83",
 origin: nil,
 retain_hours: nil,
 extension: "jpg">

But that file isn’t in uploads (or tombstone).

I looked at Avatars not showing after import and that didn’t seem to be related.

Ich habe eine Datenbankwiederherstellung aus einem Backup durchgeführt (es gab einige Datenbank-Migrationen von einer alten Version, und die backup.sql.gz enthielt nur SQL, keine Uploads).

Leider werden die Avatare auf der Website nicht angezeigt (nur der Standard-Platzhalter).

Sie scheinen korrekt in der Datenbank zu sein, die URL ist korrekt und die PNG-Datei existiert:

root@og-app:/var/www/discourse# rails c
[1] pry(main)> User.find_by_username('Overgrow').uploaded_avatar
=> #<Upload:0x0000565323a78880
 id: 2936,
 user_id: 1,
 original_filename: "avatar.png",
 filesize: 161585,
 width: nil,
 height: nil,
 url:     "/uploads/default/original/2X/f/fbba12aa89b1bc45676efcfa55affd4b7a76edf1.png",
 created_at: Sat, 03 Sep 2016 10:26:23 UTC +00:00,
 updated_at: Sat, 22 Feb 2020 11:57:35 UTC +00:00,
 sha1: "fbbe22aa89b1bc45676efcfa55affd4b7a76edf1",
 origin: nil,
 retain_hours: nil,
 extension: "unknown",
 thumbnail_width: nil,
 thumbnail_height: nil,
 etag: nil,
 secure: false,
 access_control_post_id: nil,
 original_sha1: nil>

Könntest du mir bitte raten, was ich als Nächstes versuchen soll? Vielen Dank im Voraus!

Update:

Einige Avatare wurden im Hintergrund neu generiert. Kann ich den Prozess beschleunigen oder manuell ausführen?

Nach meinen Beobachtungen könnte dieser Teil ein Hinweis auf das Problem sein?

extension: "unknown",

Es scheint, als ob bei den neu generierten Avataren dieses Feld jetzt ausgefüllt ist:

extension: "JPG",

Irgendwie fehlten nach der Wiederherstellung der Sicherung und der Migration von Discourse 1.6 auf 2.5 in der Upload-Tabelle die Werte für Breite, Höhe und Erweiterung (die Dateizeiger waren korrekt und die Dateien befanden sich am richtigen Ort).

Am Ende habe ich ein Skript erstellt, das alle benutzerdefiniert hochgeladenen Avatare durchläuft, die Erweiterung und die Abmessungen korrigiert und alle OptimizedImages mit Version-2-Thumbnails neu generiert, die mir fehlten.

Für alle Interessierten, hier ist es:

fix-avatars.rb

require File.expand_path("../../config/environment", __FILE__)

generated_count = 0

scope = UserAvatar.where("custom_upload_id > 0")

scope.find_each do |ua|

  upload_id = ua.custom_upload_id

  upload = Upload.find_by(id: upload_id)
  
  unless upload
    puts "\nno upload found for this user avatar"
    next
  end
  
  # fix unknown
  if upload.extension === 'unknown'
    upload.extension = nil 
    upload.save!
    puts "\rupload_id #{upload.id} extension unknown -> nil"
  end

  if upload.extension.nil?
    puts "\rupload_id #{upload.id} fixing extension"

    upload.fix_image_extension

    if upload.height == 0 || upload.width == 0
      puts "\rupload_id #{upload.id} fixing dimensions"
      upload.fix_dimensions!
    end

    # check optimized version
    correct_optimized = OptimizedImage.where(upload_id: upload_id)
      .where(version: 2)

    if correct_optimized.count < 1
      puts "\rupload_id #{upload.id} doesn't have version 2 thumbnails"

      # destroy old optimized
      puts "\rupload_id #{upload.id} deleting avatars"
      optimized = OptimizedImage.where(upload_id: upload_id)

      if optimized
        optimized.destroy_all
      end

      #generate optimized
      puts "\rupload_id #{upload.id} creating avatars"
      Discourse.avatar_sizes.each {|size| OptimizedImage.create_for(upload, size, size, allow_animation: SiteSetting.allow_animated_avatars)}

      generated_count += 1

      puts "\rGenerated #{generated_count} total avatars"

    end
  end

end