Questo problema è come un virus e si sta diffondendo a più avatar! Una strana osservazione è stata questa:
in Firefox alcuni avatar vengono mostrati, mentre mancano in Chrome. Questo non significa che in Firefox non manchino avatar. Ci sono anche avatar mancanti in Firefox!
Nel caso che sto esaminando, le immagini degli avatar mancanti sono state spostate nella cartella tombstone in S3 dopo un aggiornamento da riga di comando e un aggiornamento manuale di PostgreSQL da 10 a 12. Non sono ancora sicuro del motivo esatto.
Individuare i file caricati
@Jeremie_Leroy@Pad_Pors Se volete verificare se vale lo stesso nel vostro caso, il metodo che ho utilizzato per cercare gli avatar mancanti nella mia cartella tombstone di S3 è il seguente:
Ho ottenuto lo SHA1 (la stringa di 16 caratteri nell’URL di caricamento) di un avatar che sapevo essere danneggiato dopo la migrazione. L’ho fatto prendendo l’ID di caricamento dall’URL dell’avatar danneggiato (è la prima parte del nome del file, ad esempio per 6254_2.png l’ID è 6254), e poi utilizzando tale ID per cercare lo SHA1 del caricamento nel dump recente del database. Se non vi sentite a vostro agio con la riga di comando, potete visualizzare i dati del dump utilizzando un’interfaccia grafica PostgreSQL come Postico 2.
Ho eseguito una ricerca per lo SHA1 nella cartella tombstone del bucket S3 pertinente utilizzando l’AWS CLI.
Se funziona, otterrete un elenco di risultati simile a questo:
{
"Key": "tombstone/original/2X/d/d7b553ff276fca054c7090e859ef5339fd1f936e.jpg",
"LastModified": "2020-05-16T11:45:03+00:00",
"ETag": ## stringa di lettere e numeri,
"Size": 64580,
"StorageClass": "STANDARD",
"Owner": {
"ID": ## stringa di lettere e numeri
}
}
Nota: il 16/05 è la data in cui ho eseguito l’aggiornamento. Tutti gli avatar erroneamente spostati in tombstone hanno timestamp di quel periodo. Sospetto che il problema si sia manifestato con ritardo in produzione e in modo intermittente a causa della cache.
Recupero
Per quanto ne so, UploadRecovery (e il relativo task rake) è specifico per i caricamenti dei post e non gestisce gli avatar spostati in tombstone.
Sto attualmente valutando di aggiungere (patchare) un nuovo metodo a UploadRecovery che utilizzi recover_from_s3 per recuperare i caricamenti degli avatar.
Se qualcuno conosce un modo più semplice per recuperare avatar spostati erroneamente in tombstone su S3, sono tutto orecchi.
Questa situazione è complicata per me. Ci sono altre persone nella nostra stessa situazione? Ne varrà la pena lavorare su un aggiornamento? @sam@codinghorror
Grazie @angus per aver condiviso il percorso di verifica, ma non stiamo più utilizzando AWS né S3; anzi, se non erro, il problema è iniziato dopo la migrazione da AWS.
Sarei felice se il problema venisse risolto, ma al momento per me è molto più semplice chiedere a quei pochi utenti di ricaricare i propri avatar, sperando che il problema non si estenda ai nuovi utenti!
@Jeremie_Leroy Una parte del motivo per cui ho pubblicato i passaggi sopra è che ci sono varie possibili cause per gli avatar mancanti. Per sapere se questo funzionerà per te, devi prima confermare che ci siano avatar erroneamente segnati come cancellati, ovvero capire qual è la causa del problema nel tuo caso.
Capisco anche che eseguire tale analisi sia molto difficile se non hai familiarità con gli aspetti tecnici di Discourse. Ho inserito la soluzione che ho utilizzato in un plugin che puoi provare sul tuo sito. Vedi le istruzioni di seguito.
@Pad_Pors Se ti va bene chiedere semplicemente alle persone di ricaricare gli avatar, ti consiglio di farlo e non tentare questa correzione.
Istruzioni
Si prega di notare che questa è una correzione per gli avatar mancanti quando:
I caricamenti sono archiviati su S3
Gli avatar mancano perché sono stati erroneamente segnati come cancellati
Il record di caricamento dell’avatar esiste ancora
Esegui questa operazione in un momento di bassa attività sul tuo forum e fai prima un backup completo.
Installa questo plugin
Il plugin aggiunge recover_avatars a UploadRecovery e utilizza una versione adattata dello stesso metodo di ripristino usato dal metodo principale recover per recuperare i caricamenti mancanti nei post.
Questo manterrà una copia degli avatar “recuperati” nella cartella dei file cancellati per ridondanza. Queste copie verranno rimosse dal processo in background purge_deleted_uploads, che viene eseguito secondo il periodo impostato dalla configurazione del sito purge_deleted_uploads_grace_period_days.
Accedi alla console Rails
Per utilizzare il metodo, devi prima accedere al tuo server via SSH, entrare nell’istanza Docker e avviare una console Rails:
./launcher enter app
rails c
Esegui una prova
Per vedere quali caricamenti il metodo cercherà di recuperare dalla cartella dei file cancellati, esegui prima una prova:
Questo ti fornirà un elenco di nomi utente e collegamenti ai file su S3. Questi sono i file avatar che il metodo tenterà di spostare fuori dalla cartella dei file cancellati durante un’esecuzione reale:
Una volta completato il processo, controlla il tuo sito live in una nuova finestra di navigazione in incognito (per evitare problemi di cache). Una volta finito, assicurati di chiudere la connessione SSH attiva al tuo server. Non vuoi entrare per errore nel comando sbagliato nella console Rails aperta.