Kann keine Benutzer-Avatare generieren, wenn auf einen neuen Server gewechselt wird, da die Erweiterung "unbekannt" ist

EDIT: Ich klassifiziere dies neu als Fehler, damit sich jemand, der sich damit besser auskennt als ich, das ansehen kann.

Bei einer Reihe von Uploads war die Dateiendung „unknown". Das bedeutet, dass es unmöglich ist, Miniaturansichten zu generieren. Ich vermute, das ist passiert, als ein Backup auf eine neue Site verschoben wurde und anschließend die Miniaturansichten neu generiert werden mussten.

Meiner Meinung nach sollte beim Versuch, Miniaturansichten zu generieren, wenn die Dateiendung „unknown" ist, die Endung ersetzt werden, etwa so:

 upload.extension = upload.original_filename.split('.').last

Es scheint, als hätte ich diese vier Stunden nicht investieren müssen, wenn das irgendwo implementiert wäre.

Moment. Das sieht nach dem Problem aus. Warum wird false zurückgegeben, statt die Dateiendung aus dem Dateinamen zu extrahieren?

Die unangenehmen Details folgen.

Ich habe eine Site von /community auf community.example.com verschoben, indem ich ein Backup erstellt und wiederhergestellt habe. Ich habe die Uploads mit folgendem Befehl repariert:

 RAILS_ENV=production bundle exec script/discourse remap '/community/uploads' '/uploads'

Aber die Avatare sind immer noch der „Gray Man".

Wenn ich mir user.user_avatar.custom_upload.url anschaue und diese URL in den Browser einfüge, erhalte ich den gewünschten Avatar. Es scheint, als müsste ich die Benutzer neu „backen".

Ich dachte, vielleicht würde ein

rake avatars:refresh

oder

rake avatars:clean

das Problem beheben, aber leider ohne Erfolg.

Was übersehe ich?

1 „Gefällt mir“

In Sidekiq gibt es einen Trigger, um fehlende Avatare zu erstellen.

Das dauert zwar eine Weile, aber das sollte helfen, wenn ich mich nicht irre.

2 „Gefällt mir“

Gut gemacht! Dieser Aufruf führt User.refresh_avatar aus, aber leider löst auch folgendes Code-Beispiel das Problem nicht:

  user = User.find_by_username('broken_avatar_guy')
  user.refresh_avatar
2 „Gefällt mir“

Hier ist ein Hinweis:

ActionController::RoutingError (Keine Route entspricht [GET] "/user_avatar/community.example.com/broken_user")
1 „Gefällt mir“

Wird es aktualisiert, wenn sich der Benutzer bei seinem Konto anmeldet?

Das glaube ich nicht.

user.user_avatar.custom_upload enthält die korrekte URL, aber unter https://community.example.com/user_avatar/community.example.com/bad_user/25/321_2.png fehlt das Avatar-Bild. Ich muss herausfinden, wie man diese Avatar-Vorschaubilder neu erstellt.

Im Benutzer-Login habe ich im Code eine force_avatar_update gesehen.

Das könnte sehr hilfreich sein, es sieht nach einer Aufgabe aus.

Etwas muss nicht stimmen:

user = User.find_by_username('Tuomo')
upload_id = user.user_avatar.custom_upload.id
upload = Upload.find(upload_id)
Discourse.avatar_sizes.each do |size|
  OptimizedImage.create_for(upload, size, size)
end
OptimizedImage.where(upload_id: upload_id)

Und ich erhalte keine optimierten Bilder.

broken_uploads = Upload.where(extension: "unknown")
broken_uploads.each do |upload|
  upload.extension = upload.original_filename.split('.').last
  upload.save
end

behebt das Problem.

Anschließend muss ich nur noch neue Miniaturansichten generieren, wie hier:

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

has_upload.each do |user_avatar|
  Jobs.enqueue(:create_avatar_thumbnails, {upload_id: user_avatar.custom_upload_id})
end
2 „Gefällt mir“

Ich glaube, das ist ein legitimer Fehler und Jeff hat ihn :heart:ed, aber er hat keine weitere Aufmerksamkeit bekommen.

Bin ich verrückt oder ist hier etwas kaputt?

2 „Gefällt mir“

Ich habe eine Website von /community nach community.example.com verschoben, indem ich ein Backup und eine Wiederherstellung durchgeführt habe

Ich schätze, wir sind diesem Problem bei keiner unserer Wiederherstellungen begegnet, denn worüber Sie sich hier beschweren, sind Wiederherstellungsartefakte, ja? Vielleicht spezifisch für dieses Backup und diese Wiederherstellung?

1 „Gefällt mir“