Immagini perse nel backup/ripristino, cambio di dominio, impossibile caricare nuove

Il nostro gruppo ha eseguito il nostro Discourse su un dominio temporaneo per due mesi, finché non abbiamo concordato il nostro dominio effettivo. Ieri ho tentato di migrare tutto il contenuto dal vecchio dominio al nuovo. Tutto il contenuto testuale, gli account utente e persino i collegamenti tra i thread sono stati trasferiti correttamente. Ma ora:

  • Tutti gli embedding di immagini passati sembrano essere andati persi.
  • Non è possibile caricare nuove immagini.

Questo è stato il mio processo:

  • Ho generato una nuova istanza di Discourse su un nuovo droplet DigitalOcean.
  • Ho collegato il nuovo dominio a quel nuovo droplet.
  • Ho confermato che entrambe le istanze di Discourse e tutti i plugin fossero aggiornati alle ultime versioni software disponibili.
  • Ho messo la vecchia istanza di Discourse in modalità sola lettura, per impedire l’aggiunta di nuovi contenuti.
  • Ho eseguito un backup della vecchia istanza di Discourse.
  • Ho caricato il backup sulla nuova istanza di Discourse.
  • Ho aggiornato l’indirizzo email di Discourse dall’email del vecchio dominio a quella del nuovo dominio.
  • Ho eseguito un test delle notifiche, che hanno funzionato correttamente sulla nuova istanza di Discourse.
  • Ho esaminato tutte le impostazioni di Discourse per aggiornare eventuali riferimenti al vecchio dominio al nuovo dominio.
  • Ho modificato il vecchio sottodominio in modo che reindirizzasse al suo dominio corretto, aggiungendo temporaneamente una nota e un collegamento alla nuova istanza di Discourse.

Come scritto sopra, la maggior parte dei contenuti è stata trasferita senza problemi. Ma ora, a distanza di un giorno, abbiamo notato che gli embedding di immagini vecchi sono andati persi e non è possibile caricare nuove immagini. Appare solo il loro contenuto “alt”. Di seguito è riportato uno screenshot di un esempio.

Cercando su Google, sembra esserci diversi thread lunghi su questo argomento, ma non ne ho trovato uno che includa un cambio di nome di dominio e l’impossibilità di ricaricare.

Ho appena tentato di risolvere il problema facendo quanto segue:

  • Accesso SSH alla macchina.
  • Navigazione nella directory di Discourse e avvio dell’app.
  • Esecuzione di rake posts:missing_uploads. Questo riporta:
Looking for missing uploads on: default

0 post uploads are missing.
  • Esecuzione di rake uploads:missing. Questo riporta un lungo elenco:
/var/www/discourse/public/uploads/default/original/1X/bbc547e72f080561282be277749165709cbb0983.ico
/var/www/discourse/public/uploads/default/original/1X/0a421ccd1a08047895e2355f44c332f8b069107d.jpeg
/var/www/discourse/public/uploads/default/original/1X/034e0353b7558a26252c82982de53002fda0a33f.jpeg

[…]

/var/www/discourse/public/uploads/default/original/1X/f7a6164ffa55af4ee2706d2386227183ef6c2d61.png
96 di 281 upload mancano
/var/www/discourse/public/uploads/default/optimized/1X/997bc5536763d84a8d035ff7becd98277a158680_2_45x45.png

[…]

/var/www/discourse/public/uploads/default/optimized/1X/8944afba36549c9050ef074b391625ef93d4d0e3_2_1035x582.jpeg
/var/www/discourse/public/uploads/default/optimized/1X/8944afba36549c9050ef074b391625ef93d4d0e3_2_10x10.png
247 di 761 immagini ottimizzate mancano
  • Esecuzione di rake uploads:recover_from_tombstone. Questo non produce alcun output.

Ammetto di non sapere cosa facciano esattamente quei comandi Rake.

Posso anche vedere nel file containers/app.yml che DISCOURSE_HOSTNAME è il corretto (nuovo) sottodominio e dominio.

L’esecuzione di ./launcher rebuild app sembra non cambiare nulla.

Qualcuno può aiutarmi, per favore? Grazie.

Hai provato a rigenerare i post?

cd /var/discourse
./launcher enter app
rake posts:rebake

Grazie per il suggerimento. Ho appena inserito i tuoi comandi, ma non vedo alcuna differenza. Le immagini vecchie continuano a non essere visibili. Le nuove immagini continuano a non essere caricate. A proposito, la console del browser restituisce un errore “GET 404” al termine del tentativo di caricamento.

Aggiornamento:

Non so quale comando abbia esattamente migliorato la situazione, ma è migliorata, anche se non risolta.

  • Posso creare e caricare nuovi file di tipo TXT, DOCX, XLSX, JPG e PNG.
  • La maggior parte (ma non tutti) i vecchi caricamenti di tutti i tipi vengono ora visualizzati e scaricati correttamente.

I caricamenti problematici si visualizzavano/scaricavano correttamente in precedenza senza alcun problema. E ora si rifiutano di apparire dopo il ricaricamento in nuovi post di test. Come esempio:

Questa immagine: https://www.frontiersin.org/files/Articles/470644/fphys-10-00944-HTML-r1/image_m/fphys-10-00944-t001.jpg

Viene visualizzata correttamente (nel mio Discourse) quando inserisco l’URL su una riga separata, come mostrato qui sotto:

Ma scompare dal post dopo aver completato la pubblicazione e aggiornato la pagina, lasciando solo una riga vuota apparentemente. L’ispezione del codice sorgente rivela un elemento immagine con un attributo SRC impostato su un percorso del mio dominio strutturato come https://discourse.my_domain_name.org/uploads/default/original/1X/61ae2bdeff3dfe334ad6803409560b667d7dc246.jpeg. Aprendo quel percorso in una nuova scheda, viene caricata una pagina di errore NGINX 404.

Quando scarico l’immagine dalla sua fonte originale sul mio laptop e la carico sul mio Discourse (come farò qui in questo Discourse qui sotto), il caricamento fallisce sul mio Discourse.

Nel mio Discourse, appare così:

E se faccio clic con il tasto destro sull’immagine fallita e scelgo “Apri immagine in una nuova scheda”, viene caricata una pagina di errore NGINX 404.

Nella finestra di composizione vedo ora che Discourse cambia l’estensione dell’immagine da JPG a JPEG, ma non credo che questo abbia importanza.

Se apro l’immagine scaricata nell’app Affinity Photo, la esporto senza compressione come nuovo JPG e la ricarico sul mio Discourse, viene visualizzata correttamente.

Questo mi suggerisce che il problema risiede ancora nel mio Discourse, non nei file caricati.

Mi sono imbattuto in questo problema durante un recente trasferimento.

Il modo più semplice e non tecnico per risolverlo è accedere al tuo sito/host originale con FileZilla, navigare in

VAR/Discourse/Uploads

Qui troverai delle sottocartelle contenenti immagini. Le ho semplicemente scaricate dall’host originale e caricate su quello nuovo.

Un’alternativa più rapida è utilizzare questo metodo di backup. È un processo manuale, ma ha funzionato bene anche in questo caso.

Grazie per la risposta. Non ho mai usato l’app FileZilla. Uso Transmit per l’FTP. Ma non so come connettermi alla mia app Discourse sul mio droplet DigitalOcean tramite FTP.

Posso accedere via SSH al mio droplet e navigare in /var/discourse/, ma lì non c’è alcuna directory uploads.

Anche se spostassi manualmente i file immagine dalla vecchia alla nuova posizione, come risolverebbe questo il problema del fallimento nel ricaricare le stesse immagini?

La mia comprensione molto basilare di Discourse (e sono davvero un principiante) è che le immagini caricate vengono archiviate sul tuo sito e viene salvata anche una versione ottimizzata delle dimensioni del file. Inizialmente, agli utenti viene visualizzata l’immagine originale e, in un secondo momento, il forum passa all’immagine ottimizzata (a me è sembrato che ciò avvenisse dopo 24 ore).

Ho fatto qualche esperimento con le impostazioni, poiché ero preoccupato di esaurire lo spazio di archiviazione.

Nella tua dashboard di amministrazione, controllale (nella sezione File). Ci sono diverse impostazioni per controllare le dimensioni e le dimensioni delle immagini. Questo potrebbe essere correlato al tuo problema con le immagini anomale (se ho capito correttamente). Ad esempio, la tua immagine riformattata rientra ancora al di fuori dei criteri.

Il mio problema quando ho trasferito l’host da Digital Ocean a Hetzner era che alcune immagini (e avatar) semplicemente non venivano visualizzate (simile al tuo primo screenshot). La mia soluzione è stata spostarle via FTP (un metodo grezzo, ma ha funzionato). Non sono sicuro al 100% del perché. All’inizio ho spostato solo le immagini ottimizzate e il problema non è stato risolto, ma quando ho spostato tutte le immagini il problema si è risolto.

Mi scuso per l’errore sulla cartella; stavo agendo a memoria. La struttura delle cartelle è: VAR/Discourse/Shared/Standalone/Upload

È molto facile accedere con un client FTP su Digital Ocean

Host: indirizzo IP di Discourse
Porta: 22
Nome utente: root
Password: la tua password SSH

Come ho detto, sono tutt’altro che un esperto, sono più qualcuno che ci ha sperimentato negli ultimi mesi.

Ci sono persone qui che possono offrire consigli migliori (e approfondimenti). Ma se tutto il resto fallisce, potrebbe valere la pena provare il mio approccio.

La mia soluzione è stata spostarli via FTP (grossolana, ma ha funzionato). Non sono sicuro al 100% del perché. All’inizio ho spostato solo le immagini ottimizzate e ciò non ha risolto il problema, ma quando ho spostato tutte le immagini, il mio problema è stato risolto.

Grazie per le istruzioni più dettagliate su come accedere via FTP ai miei due Discourse. La cartella uploads era di circa 125 MB sul vecchio Discourse e 60 MB su quello nuovo. Quindi ho copiato quella vecchia sul desktop del mio laptop. Poi ho copiato il suo contenuto, cartella per cartella, sul nuovo Discourse, saltando eventuali duplicati.

E, a mia sorpresa, sembra aver risolto il problema. Tutti gli upload di immagini sembrano essere stati corretti, sia nei thread precedenti alla migrazione del mio Discourse, sia nei thread che ho creato oggi durante la risoluzione dei problemi.

Potrei ipotizzare che Discourse stesse riutilizzando puntatori preesistenti a contenuti che in qualche modo sono andati persi durante lo spostamento. Quindi, se avessi ricaricato esattamente lo stesso file immagine, avrebbe riutilizzato un puntatore rotto e avrebbe fallito ripetutamente. Ma quando l’ho salvato di nuovo come file nuovo, è riuscito perché ha archiviato una nuova copia con un nuovo puntatore. Forse.

Grazie ancora mille volte.

Per impostazione predefinita, i backup non contengono immagini ottimizzate, in quanto possono essere rigenerate. Includerle sprecherebbe larghezza di banda e spazio su disco.

Nel tuo caso, sarebbe stato utile includerle attivando l’impostazione del sito include_thumbnails_in_backups prima di creare il backup.

In alternativa, dopo il ripristino, sarebbe stato sufficiente eseguire rake posts:rebake_uncooked_posts. In caso contrario, le immagini ottimizzate vengono rigenerate da un processo in background, ma ciò richiede del tempo… Al termine del ripristino, un messaggio di log ti informa esattamente di questo.