Le immagini dopo un ripristino non hanno l'URL del bucket S3

Stiamo costruendo, testando e cercando intenzionalmente lacune nel nostro forum Discourse prima di spostare l’intera cosa in produzione. Ho appena migrato il mio forum di test, che aveva abilitato i caricamenti su S3, da un server a un altro e, al ripristino, tutti gli URL per qualsiasi allegato sono stati riscritti con l’URL del forum invece che con quello di S3…

Fortunatamente si tratta di un forum di test, quindi non ci preoccupiamo troppo dei dati, tuttavia vorrei:
A. Risolvere comunque il problema.

B. Trovare un modo per mitigare/prevenire che ciò accada in produzione.

Non sono stati solo i post, ma tutte le immagini, i media, i contenuti e gli avatar (cosa piuttosto drammatica) sono stati interessati da questo…

Qualche idea?

Prima di ripristinare, puoi configurare S3 sul sito di destinazione nel tuo app.yml (non tramite la dashboard di amministrazione). Una volta confermato che la configurazione è corretta e che è possibile raggiungere il bucket appropriato, puoi procedere con il ripristino e i media verranno collegati correttamente.

Abbiamo una guida per configurare S3 in questo modo qui: Configure an S3 compatible object storage provider for uploads

Ciao Kris,

Abbiamo effettivamente fatto quello e così è finita in quella situazione.

Ho copiato l’app.yml così com’era nella destinazione e poi ho eseguito il backup dall’originale. Il problema è stato il ripristino: quando abbiamo ripristinato, gli URL sono stati riscritti, nonostante non fosse cambiato nulla e avessimo ancora gli upload su S3 abilitati.

Alla fine abbiamo risolto il problema con un rebake (creiamo, la cache di Discourse è molto aggressiva, quindi tra le tante soluzioni che abbiamo provato, non sappiamo davvero quale abbia funzionato), ma restano ancora senza risposta le domande su come effettuare le migrazioni con il minimo numero di problemi o persino su come ripristinare da un backup se necessario in produzione.

Sembra che tu abbia configurato S3 tramite le impostazioni del sito e non tramite le variabili d’ambiente, come suggerito da Kris. Il processo di ripristino deve conoscere le informazioni relative a S3, cosa non possibile con le impostazioni del sito.

Se lo desideri, puoi anche creare un backup senza i file caricati dalla riga di comando: discourse backup --sql_only
Il ripristino di un tale backup non riscriverà gli URL dei file caricati. Quindi, finché il tuo nuovo server ha accesso allo stesso bucket S3, questo metodo funziona.

La configurazione S3 si trova nel file app.yml, non nelle impostazioni del sito.

Modifica:

Mi rendo conto di non essere stato sufficientemente esplicativo e non intendo nascondere dettagli.

Utilizziamo OVH S3 ed è configurato in app.yml.

Ho eseguito un backup del nostro forum di test senza i file caricati, ma S3 era ancora abilitato in quel momento.

Poi l’ho ripristinato sul nuovo sito con lo stesso file app.yml e da lì è iniziato il problema. Per essere chiari, ora è risolto, ma non sono sicuro se sia dovuto al fatto che l’ho rigenerato diverse volte o alla cache aggressiva di Discourse. Ecco perché devo sapere come farlo correttamente e ottenere il risultato giusto al primo tentativo. Temo che, se dovessimo mai dover ripristinare un backup sulla nostra istanza di produzione e incontrassimo questo problema, devo sapere esattamente come risolverlo immediatamente prima che gli utenti se ne accorgano.