Impossible de générer des avatars utilisateur lors du passage à un nouveau serveur car l'extension est "inconnue"

EDIT : Je reclasse cela comme un bug, afin que quelqu’un qui comprend mieux le sujet que moi puisse l’examiner.

Plusieurs téléversements avaient l’extension « unknown ». Cela signifie qu’il est impossible de générer des vignettes. Je pense que cela s’est produit lors du déplacement d’une sauvegarde vers un nouveau site, puis de la nécessité de régénérer les vignettes.

Je pense que ce qui devrait se produire lorsque vous essayez de générer des vignettes et que l’extension est « unknown », c’est de remplacer l’extension, quelque chose comme :

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

Il semble que si cela avait été fait quelque part, je n’aurais pas passé 4 heures sur ce problème.

Attendez. Voici le problème. Pourquoi retourner false plutôt que d’obtenir l’extension à partir du nom de fichier ?

Les détails croustillants suivent.

J’ai déplacé un site de /community vers community.example.com en effectuant une sauvegarde et une restauration. J’ai corrigé les téléversements avec :

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

Mais les avatars sont toujours ceux de l’Homme Gris.

Lorsque j’examine user.user_avatar.custom_upload.url et que je colle cette URL dans le navigateur, j’obtiens l’avatar souhaité. Il semble que je doive « recuire » les utilisateurs.

Je pensais qu’une commande

rake avatars:refresh

ou

rake avatars:clean

pourrait régler le problème, mais rien n’y fait.

Qu’est-ce que je rate ?

1 « J'aime »

Dans Sidekiq, il existe un déclencheur pour créer les avatars manquants.

Cela prend un certain temps, mais cela devrait aider si je ne me trompe pas.

2 « J'aime »

Bien joué ! Cela appelle User.refresh_avatar, mais malheureusement, le code suivant ne résout pas le problème non plus :

  user = User.find_by_username('broken_avatar_guy')
  user.refresh_avatar
2 « J'aime »

Voici un indice :

ActionController::RoutingError (Aucune route ne correspond à [GET] "/user_avatar/community.example.com/broken_user")
1 « J'aime »

Le met-il à jour lorsque l’utilisateur se connecte à son compte ?

Je ne le pense pas.

user.user_avatar.custom_upload contient l’URL correcte, mais https://community.example.com/user_avatar/community.example.com/bad_user/25/321_2.png affiche une image d’avatar manquante. Je dois trouver un moyen de reconstruire ces miniatures d’avatar.

il y a un force_avatar_update dans la connexion utilisateur que j’ai remarqué dans le code.

Cela pourrait être très utile, cela ressemble à un travail

Quelque chose ne va pas :

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)

Et je n’obtiens aucune image optimisée.

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

corrige cela.

Ensuite, je dois simplement générer de nouvelles vignettes, comme ceci :

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 « J'aime »

Je pense que c’est un bug légitime et que Jeff :heart:é, mais il n’a pas reçu plus d’attention.

Suis-je fou ou y a-t-il quelque chose qui ne va pas ici ?

2 « J'aime »

J’ai déplacé un site de /community vers community.example.com en effectuant une sauvegarde et une restauration.

Je suppose que nous n’avons tout simplement pas rencontré cela avec aucune de nos restaurations, car ce dont vous vous plaignez ici sont des artefacts de restauration, n’est-ce pas ? Peut-être spécifiques à cette sauvegarde et restauration ?

1 « J'aime »