Avatar persi dopo il ripristino. Come recuperarli?

Ho eseguito un’installazione pulita di Discourse e ho ripristinato il backup creato nella stessa notte (utilizzando l’interfaccia di Discourse per eseguire backup e ripristino).

Il backup includeva il database e gli upload.

Dopo il ripristino e la ricostruzione dell’app Discourse (che supponevo necessaria a causa delle modifiche alla configurazione dovute all’installazione pulita), abbiamo riscontrato un problema.

Gli avatar di tutti gli utenti che avevano personalizzato la propria immagine del profilo sono andati persi.

Immagino che ciò sia legato all’ottimizzazione delle immagini; forse è necessario eseguire qualche operazione aggiuntiva (oltre al rebuild dell’app tramite launcher) per ricrearli.

Tuttavia, non sono riuscito a individuare quale sia il passaggio mancante.

Ho trovato discussioni di utenti che avevano perso gli avatar standard (quelli distribuiti con Discourse), ma questo non è il nostro caso: gli utenti che non hanno modificato il proprio avatar (e non hanno caricato un’immagine) hanno ancora l’avatar con la lettera iniziale.

AGGIORNAMENTO:

Ho eseguito
./launcher enter app
rake posts:rebake

ma non ha risolto il problema.

Forse non è posts:rebake?

@arinaf,

Stranamente, la stessa cosa mi è capitata oggi su una configurazione con un reverse proxy nginx collegato a un socket Unix. Tutto era perfetto, tranne le immagini avatar personalizzate, che venivano visualizzate come icone (l’icona della persona), mentre tutte le avatar con le lettere erano corrette.

Mentre facevo il troubleshooting, sono tornato a una configurazione standard a due container (senza frontend nginx, senza socket Unix) e il problema è scomparso.

Poi, sono tornato alla configurazione con reverse proxy nginx collegato a un socket Unix, e il problema è ricomparso.

Sono senza parole… quindi mi prendo una pausa per un po’ :slight_smile:

Ovviamente i dati sono al sicuro perché funzionano perfettamente senza reverse proxy nginx, il che è strano, dato che funzionano bene senza di esso. LOL. (Funzionava senza intoppi in entrambi i modi e improvvisamente è emerso il bizzarro problema delle avatar…)

Questa è esattamente la mia configurazione, dato che sto eseguendo altri software in un contenitore Docker (un blog Ghost).
Utilizzo nginx come reverse proxy.

Ovviamente, il ripristino dei backup non è così semplice come sembra.

Ho effettuato dei rebase, pensando che il problema fosse legato al mancato salvataggio delle miniature, ma senza successo.

Proverò quanto hai suggerito per confermare se il problema risiede nel reverse proxy (non ho idea di come possa interferire, ma non perdo nulla nel provare).

Sì… non credo che il problema sia legato al database backend, al ripristino del DB (o al rake).

Appena disattivo il reverse proxy ed eseguo due contenitori senza di esso, il problema scompare e, dato che il DB è lo stesso in tutti i casi, è improbabile che si tratti di un problema del DB.

Sarò offline per 12 ore, quindi controllerò più tardi e vedrò cosa è successo nella tua configurazione @ariznaf

Stai utilizzando HTTPS al di fuori del container?

Hai esaminato il codice sorgente della pagina per vedere quali URL vengono utilizzati per gli avatar?

Sembra che force_https non sia abilitato.

Non posso farlo ora, perché devo ricominciare da capo.

Ho provato a copiare tutti i file (con Discourse spento nell’origine), ma non ha funzionato nemmeno questo (problemi con il database).

Proverò a ricominciare, installando una versione pulita di Discourse e poi ripristinando il backup creato con Discourse.

Verificherò, grazie.

Sto cercando di ripristinare i database o migrare da un host all’altro, ma è più difficile del previsto.

Grazie a entrambi.

A meno che tu non stia utilizzando un reverse proxy e la piattaforma di destinazione sia rappresentativa e configurata correttamente, il processo è solitamente incredibilmente semplice.

Bene, a meno che nel frattempo non ci sia stato un aggiornamento di Discorso stesso o dei plugin che stai utilizzando (io ne uso solo alcuni ufficiali + anteprime dell’elenco degli argomenti e alcuni componenti), ogni volta che ho provato a simulare un ripristino si è verificato qualche tipo di problema.

Sento che il sistema di backup è semplice e diretto, ma non abbastanza robusto quando si deve trasferire tutto su un altro server.
E non è abbastanza flessibile.

Ci vuole anche troppo tempo per completarlo (per un sito non così grande, il backup completo è solo di 3 GB).

Il nostro vecchio forum aveva più di 100 GB di dati; sarebbe stato impossibile eseguire il backup di un forum così grande con il sistema attuale.

Le varie immagini avatar ridimensionate non sono incluse nel backup, solo quelle originali. Ci vorrà del tempo perché il lavoro pianificato elabori e generi le versioni ridimensionate di ogni avatar.

AH, OK.
Grazie mille.
Non sapevo che venissero ricostruiti in background.
Quindi è solo una questione di attesa.

Mi stavo arrabbiando usando rake posts:rebuild e cose del genere.

Mi hai risparmiato un sacco di mal di testa. Grazie mille.

Puoi accelerare il processo andando su /sidekiq/scheduled nel tuo forum e premendo il pulsante “Trigger” accanto al job CreateMissingAvatars.

Wow, c’è un intero mondo nascosto lì in /sidekiq :slight_smile:

Ho provato quanto hai suggerito.

Ma il job CreateMissingAvatars è stato schedulato ed eseguito, ma termina quasi immediatamente, richiedendo solo pochi millisecondi per completarsi. Ho provato a eseguirlo manualmente (usando Trigger), ma di nuovo termina immediatamente con un risultato OK.

Tuttavia, gli avatar sono ancora errati.
Stavo usando la mia configurazione originale, con Discourse in ascolto su una socket e nginx come reverse proxy.

Ora proverò a rimuovere nginx ed eseguire Discorse sulle porte 80 e 443.

Ciao @ariznaf

Mi sono svegliato stamattina dopo essere stato offline per 12 ore, ho ripassato alla configurazione socket-only.yml e tutto è tornato alla normalità.

Quindi, almeno da questa parte dell’ampio universo di Discourse, è tutto di nuovo a posto nel mondo di due container, nginx reverse proxy verso socket Unix.

Avevamo cambiato alla configurazione frontend nginx circa sei ore prima che l’anomalia venisse notata, e tutto era a posto.

Basandomi su questo utile suggerimento di @riking (come sempre, molto apprezzato Kane)

Le varie immagini degli avatar ridimensionate non sono incluse nel backup, solo gli originali. Ci vorrà del tempo perché il processo pianificato elabori e generi le versioni ridimensionate di ogni avatar.

Screen Shot 2020-04-17 at 9.06.09 AM

La mia migliore ipotesi è che, quando abbiamo fatto il passaggio a nginx, non abbiamo notato problemi perché le molte immagini degli avatar erano già nella cache e il processo di rigenerazione non era ancora terminato; così, col tempo, la cache di quelle immagini è scaduta e l’anomalia ha iniziato a manifestarsi.

Quindi mi sono disconnesso (il container socket-only.yml era ancora in esecuzione in background, inattivo) per 12 ore, mi sono svegliato la mattina e sidekiq ha fatto la sua magia durante la notte (qui), come @riking (grande supporto, a proposito, Kane, su ogni argomento qui su meta).

Questo scenario sembra confermare quanto suggerito da @riking.

Onestamente, più usiamo Discourse, più ci piace. Gli intoppi e le anomalie sono molto interessanti e la configurazione a due container è davvero ottima.

I nostri container attualmente sono così:

# ls -l containers
-rw-r--r-- 1 discourse root 1124 Apr 15 11:29 data.yml
-rw-r--r-- 1 discourse root 3939 Apr 16 07:45 socket-only.yml
-rw-r--r-- 1 discourse root 3784 Apr 16 07:28 socket.yml
-rw-r--r-- 1 discourse root 3921 Apr 15 11:50 web-only.yml

Ciò che mi piace è che, anche quando notiamo un problema, come questa anomalia di rigenerazione degli avatar, possiamo facilmente passare avanti e indietro da socket-only.yml a web-only.yml.

In questo caso, siamo tornati a web-only (durante questa rigenerazione) e poi siamo passati di nuovo dopo che il processo era completato (perché tutti i container sono ancora in esecuzione). Quando eseguiamo una ricostruzione del container, possiamo semplicemente passare tra questi container e le configurazioni in modo molto semplice.

Dopo due decenni di gestione di un forum LAMP, siamo sempre più impressionati da Discourse, dal punto di vista dell’amministrazione di sistema.

Sidebar (Editoriale);

Ovviamente, è ben al di sopra del mio livello qui su meta, ma penso che la configurazione base a due container (senza reverse proxy) dovrebbe essere quella predefinita, poiché è molto semplice da configurare e otteniamo molto di più da questa configurazione rispetto a qualsiasi presunta “penalità” dovuta alla presenza di due file yml.

Dal mio lato, ho provato a eseguire il ripristino utilizzando solo il backup creato dall’interfaccia.

Come già commentato, abbiamo perso le immagini degli avatar e alcune altre cose minori.

Ho cercato di seguire le indicazioni fornite da @riking, ma senza successo.

Ho provato a ricaricare le immagini degli avatar forzando l’esecuzione del processo, ma si è concluso con uno stato OK dopo pochi millisecondi e gli avatar non sono stati generati.

Poiché avevamo fretta di spostare i contenuti, ho arrestato il forum sul vecchio server, copiato tutti i contenuti nei container e nelle directory condivise utilizzando tar, installato Discourse sul nuovo server (senza eseguire la configurazione iniziale), copiato lì le directory condivise e dei container, e ricostruito l’app.

Ora tutto funziona sul nuovo server.

Il ripristino dal backup sta diventando più problematico del previsto (sembra infatti piuttosto semplice, dato che le istruzioni indicano solo di reinstallare e ripristinare dall’interfaccia).

Devo indagare cosa va storto durante il ripristino e come assicurarmi che il sistema si avvii correttamente anche se ripristiniamo da un backup vecchio, quando Discourse è a diverse versioni di distanza rispetto a quella in cui è stato eseguito il backup.

Mi piace molto Discourse.
Provenendo da altri forum tradizionali, a volte è difficile trovare ciò che si cerca.
L’interfaccia pulita non aiuta in questi casi.

Ma quando finalmente lo trovi, è esattamente dove dovrebbe essere e funziona in modo intelligente.

Abbiamo problemi solo con il ripristino dal backup.
E talvolta con l’uso intensivo della cache.

Discourse impiega un po’ di tempo a caricarsi la prima volta nel tuo browser web, ma dopo di che vola, poiché la maggior parte dell’elaborazione avviene sul tuo computer e utilizza molta cache (avatar, immagini, CSS…). L’app non recupera le informazioni che ha già sul tuo computer, risparmiando così molto lavoro al server (almeno è quello che sembra fare, dalla mia esperienza).

Quando provo a spostarmi da un server all’altro o a reinstallare Discourse da zero, continuo a vedere i vecchi contenuti anche se aggiorno la visualizzazione.

Non sono riuscito a liberarmene finché non ho cancellato la cronologia di navigazione del browser.
Questo mi ha tenuto occupato e confuso per un bel po’.

A PROPOSITO, quelle immagini degli avatar vengono salvate se si selezionano le miniature salvate nel backup?
Pensi sia meglio salvarle?
Il nostro forum non è troppo grande, ma salvare 36.000 immagini ha richiesto un bel po’ di tempo.

Ciao @ariznaf,

Il nostro backup completo ha la stessa dimensione, circa 3 GB completamente compressi con gzip.

Finora non ho riscontrato nessuno dei problemi che hai menzionato nel tuo post (appena sopra, #13).

Ripristini da riga di comando o dall’interfaccia utente?

Noi ripristiniamo solo da riga di comando all’interno del container. Immagino che sia lo stesso per te?

Queste sono buone notizie. Complimenti.

Grazie per il tuo interesse.

Ho seguito le istruzioni presenti nei tutorial, utilizzando l’interfaccia. Non so come eseguire il ripristino da riga di comando (dai backup creati tramite l’interfaccia di Discourse).

Faccio una spiegazione:

Ho dovuto spostare il server da a.domain.com a b.domain.com.
Il forum Discourse è accessibile tramite HTTPS con un SSL personalizzato (abbiamo certificati SSL per tutto il dominio).
Discourse è installato utilizzando un socket e con HOST NAME a.domain.com.
Abbiamo configurato nginx come reverse proxy per reindirizzare permanentemente il traffico HTTP (porta 80) verso HTTPS (porta 443), mentre HTTPS (porta 443) funge da reverse proxy per il traffico HTTPS, reindirizzandolo al socket su cui Discourse è in ascolto.

Avevo un backup (tramite l’interfaccia) di a.domain.com in un bucket S3, contenente il database e i file caricati, ma non le miniature (circa 3 GB).

Ho installato nginx e copiato il file di configurazione da a.domain.com, modificando il nome del host da a.domain.com a b.domain.com.

Ho installato Discourse clonando il repository da GitHub (come consigliato nel tutorial di installazione in 30 minuti).
Poi ho eseguito discourse setup (con nginx fermato) e lo ho configurato con HOSTNAME b.domain.com.

Ho acceduto alla nuova installazione su b.domain.com come amministratore.
Tramite l’interfaccia, ho configurato i backup per accedere al bucket S3, ho attivato le funzionalità di ripristino per gli amministratori e ho ripristinato l’ultimo backup.

Successivamente, sei disconnesso da Discourse, poiché ci sono nuovi utenti, configurazioni, ecc.

Tornando alla riga di comando, ho modificato il file app.yml copiando la configurazione dal server originale (a.domain.com), cambiando solo il nome del host in b.domain.com.

Poi ho eseguito ./launcher rebuild all e, al termine, ho avviato nginx.

Ora riesco ad accedere al forum Discourse, ma le avatar sono perse e ci sono altri problemi con le miniature delle immagini.

Grazie per questi dettagli così utili @ariznaf

Onestamente, non sono un fan dei servizi di archiviazione cloud come S3 e quindi, penso che sia meglio mettere da parte qualsiasi altra idea, dato che non siamo “utenti S3”…

Dici che gli avatar sono persi, ma hai controllato il codice sorgente della pagina per vedere da dove vengono richiesti?

Sono ancora su S3?

Perché hai dovuto cambiare i sottodomini?

Per essere chiari, hai cambiato sia il server fisico che l’indirizzo DNS?

Riking dice che il sistema deve ricostruire le miniature. Ma il lavoro sembrava essere già completato.

Proverò di nuovo. Ora l’ho risolto in un altro modo.

In S3 vengono salvati solo i backup; immagini e upload sono archiviati localmente.

Devo comunque eseguire dei test di ripristino per capire qual è il problema.
Vedrò da dove il sistema sta tentando di recuperare l’immagine.

Comunque ha mostrato un’immagine con una sagoma bianca, quindi non si tratta di un link rotto: è stata probabilmente sostituita dal sistema perché non disponeva della miniatura.