pfaffman
(Jay Pfaffman)
26 Ottobre 2021, 2:35pm
1
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?
end
def has_thumbnail?(width, height)
thumbnail(width, height).present?
end
def create_thumbnail!(width, height, opts = nil)
return unless SiteSetting.create_thumbnails?
opts ||= {}
save(validate: false) if get_optimized_image(width, height, opts)
end
# this method attempts to correct old incorrect extensions
def get_optimized_image(width, height, opts = nil)
opts ||= {}
fix_image_extension if (!extension || extension.length == 0)
opts = opts.merge(raise_on_error: true)
begin
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
IAmGav
(Gavin Perch)
26 Ottobre 2021, 2:41pm
2
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
pfaffman
(Jay Pfaffman)
26 Ottobre 2021, 2:49pm
3
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
pfaffman
(Jay Pfaffman)
27 Ottobre 2021, 12:30pm
4
Ecco un indizio:
ActionController::RoutingError (Nessuna rotta corrisponde a [GET] "/user_avatar/community.example.com/broken_user")
1 Mi Piace
IAmGav
(Gavin Perch)
27 Ottobre 2021, 12:51pm
5
Viene aggiornato quando l’utente accede al proprio account?
pfaffman
(Jay Pfaffman)
27 Ottobre 2021, 12:54pm
6
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.
IAmGav
(Gavin Perch)
27 Ottobre 2021, 12:56pm
7
nel codice ho notato un force_avatar_update durante l’accesso dell’utente.
IAmGav
(Gavin Perch)
27 Ottobre 2021, 1:01pm
8
Questo potrebbe essere molto utile, sembra proprio il lavoro adatto
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe Jobs::FixOutOfSyncUserUploadedAvatar do
it 'should fix out of sync user uploaded avatars' do
user_with_custom_upload = Fabricate(:user)
custom_upload1 = Fabricate(:upload, user: user_with_custom_upload)
gravatar_upload1 = Fabricate(:upload, user: user_with_custom_upload)
user_with_custom_upload.update!(uploaded_avatar: custom_upload1)
user_with_custom_upload.user_avatar.update!(
custom_upload: custom_upload1,
gravatar_upload: gravatar_upload1
)
user_out_of_sync = Fabricate(:user)
custom_upload2 = Fabricate(:upload, user: user_out_of_sync)
gravatar_upload2 = Fabricate(:upload, user: user_out_of_sync)
prev_gravatar_upload = Fabricate(:upload, user: user_out_of_sync)
This file has been truncated. show original
pfaffman
(Jay Pfaffman)
27 Ottobre 2021, 6:25pm
9
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
pfaffman
(Jay Pfaffman)
10 Novembre 2021, 8:00pm
10
Penso che questo sia un bug legittimo e Jeff 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