Impossibile generare avatar utente durante lo spostamento su un nuovo server perché l'estensione è "unknown"

MODIFICA: Riclassifico questo come un bug, in modo che qualcuno che lo capisce meglio di me possa prenderlo in esame.

Un mucchio di caricamenti aveva come estensione “unknown”. Questo significa che è impossibile generare le miniature. Credo che ciò sia accaduto quando si è spostato un backup su un nuovo sito e poi si è dovuta rigenerare la miniature.

Penso che quando si tenta di generare le miniature e l’estensione è ‘unknown’, si dovrebbe sostituire l’estensione, qualcosa del genere:

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

Sembra che se ciò fosse stato fatto da qualche parte, non avrei perso 4 ore su questo.

Aspetta. Questo sembra essere il problema. Perché restituire false invece di ottenere l’estensione dal nome del file?

Seguono i dettagli macabri.

Ho spostato un sito da /community a community.example.com eseguendo un backup e un ripristino. Ho corretto i caricamenti con:

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

Ma gli avatar sono ancora l’Uomo Grigio.

Quando guardo user.user_avatar.custom_upload.url e incollo quell’URL nel browser, ottengo l’avatar desiderato. Sembra che debba “rifare” gli utenti.

Ho pensato che forse un:

rake avatars:refresh

o

rake avatars:clean

potesse risolvere, ma niente da fare.

Cosa mi sto perdendo?

1 Mi Piace

In Sidekiq c’è un trigger per creare gli avatar mancanti.

Ci vuole un po’ di tempo, ma dovrebbe aiutare, se non sbaglio.

2 Mi Piace

Brava! Quella chiama User.refresh_avatar, ma purtroppo

  user=User.find_by_username('broken_avatar_guy')
  user.refresh_avatar

non risolve nemmeno questo problema.

2 Mi Piace

Ecco un indizio:

ActionController::RoutingError (Nessuna rotta corrisponde a [GET] "/user_avatar/community.example.com/broken_user")
1 Mi Piace

Viene aggiornato quando l’utente accede al proprio account?

Non credo proprio.

user.user_avatar.custom_upload contiene l’URL corretto, ma https://community.example.com/user_avatar/community.example.com/bad_user/25/321_2.png mostra l’immagine dell’avatar mancante. Devo trovare un modo per ricostruire quelle miniature degli avatar.

nel codice ho notato un force_avatar_update durante l’accesso dell’utente.

Questo potrebbe essere molto utile, sembra proprio il lavoro adatto

C’è qualcosa che non va:

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)

E ottengo zero immagini ottimizzate.

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

risolve il problema.

Poi devo solo generare nuove miniature, così:

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 Mi Piace

Penso che questo sia un bug legittimo e Jeff :heart:ed, ma non ha ricevuto ulteriore attenzione.

Sono pazzo o c’è qualcosa che non va qui?

2 Mi Piace

Ho spostato un sito da /community a community.example.com eseguendo un backup e ripristino

Immagino che non ci siamo mai imbattuti in questo con nessuno dei nostri ripristini, perché ciò di cui ti lamenti qui sono artefatti del ripristino, giusto? Forse specifici di questo backup e ripristino?

1 Mi Piace