Immagini rotte e i relativi URL S3

@schleifer Ehi, possiamo avere delle indicazioni dopo questo, per favore?

OK, è qualcosa con cui possiamo lavorare. Per prima cosa, sposta tutti i file da /default/* in /original/1X/*.

Questo è noto a noi, ma non al database. Il prossimo passaggio aggiornerà il percorso per tutti i caricamenti nel DB. Prima di modificare qualsiasi altra cosa, tuttavia, eseguiamo un controllo di coerenza.

Avvia la console del database:

cd /var/discourse
./launcher enter
rails db

Esegui questa query per esaminare i risultati:

select id,url from uploads where id > 0 and url not like '//PREFIX/original/%'

Dovrai sostituire PREFIX con BUCKET + ‘.s3.dualstack.’ + REGION + ‘.amazonaws.com’, il che darà qualcosa come //pesioforum.s3.dualstack.us-west-2.amazonaws.com/original/%.

Questo dovrebbe restituire (0 righe). Se non è così, allora avremo passaggi aggiuntivi.

Ci sono 7 upload per la tua query e nessuno di essi proviene da S3.
Quindi tutti i link S3 puntano solo all’originale, giusto? I 7 upload risalgono a prima dell’inizio dell’uso di S3 per gli upload (ottobre 2018).

Dei link S3 (2614),
2368 utilizzano //pesioforum.s3.dualstack.ap-south-1.amazonaws.com
246 utilizzano //pesioforum.s3.ap-south-1.amazonaws.com

Entrambi i link funzionano, lo menziono qui perché potrebbe influire su eventuali espressioni regolari che potremmo utilizzare.

@schleifer Aiutaci a finire questo. :smiling_face:

OK, quindi dovresti essere libero di spostare i file da /default/ a /original/1X.

Puoi migrarli su S3 eseguendo rake s3:upload_assets

L’endpoint dualstack funziona sia per IPv6 che per IPv4. L’altro è solo per IPv4.

Nell’immagine è presente uno script per la ricomposizione delle stringhe nel database. Prima di eseguirlo, FAI SEMPRE UN BACKUP tramite /admin/backups (Menu hamburger → Admin → Backup).

Questo dovrebbe risolvere i 246:

discourse remap '//pesioforum.s3.ap-south-1.amazonaws.com/original/' '//pesioforum.s3.dualstack.ap-south-1.amazonaws.com/original/'

Dopo aver spostato tutto da /default/ a /original/1X/, possiamo ricomporre quei file nel DB. Ma prima di farlo, dobbiamo assicurarci che ogni cosa in /original/2X sia effettivamente presente.

Questa query restituisce lo stesso numero di righe del conteggio degli oggetti effettivi sotto quel percorso nel bucket?:
select url from uploads where url like '//pesioforum.s3.dualstack.us-west-2.amazonaws.com/original/2X/%'

Ciao @schleifer

Puoi migrare quelli in S3 eseguendo rake s3:upload_assets

Ho eseguito questo comando e ha caricato le risorse (js, css, ecc.) per il sito web. I 7 file non sono stati caricati.
Ho trovato rake uploads:migrate_to_s3, ma volevo confermare che fosse il task corretto per questo scopo.

C’è uno script nell’immagine per rimappare le stringhe nel database

Ha funzionato bene e non ci sono più vecchi link non dualstack nella tabella uploads.

Ma prima di questo, dovremmo assicurarci che tutto in /original/2X sia effettivamente presente.

Purtroppo non è così. Ci sono 521 file nel bucket S3, ma 2186 record nella tabella uploads.
Ho testato alcuni file che non si trovano in /original/2X/ come previsto e sono tutti in /default/.

Esempio: Dalla tabella uploads,
https://pesioforum.s3.dualstack.ap-south-1.amazonaws.com/original/2X/8/806a660beb158e9f06d07ffcd2370b389bbd250b.jpeg non esiste, ma lo stesso file si trova in
https://pesioforum.s3.dualstack.ap-south-1.amazonaws.com/default/806a660beb158e9f06d07ffcd2370b389bbd250b.jpeg

A questo punto, come soluzione temporanea una tantum, siamo d’accordo nel spostare semplicemente tutti i file da /original/2X/{}/ in /original/1X/ e aggiornare i post, ecc., con i nuovi link.
I nuovi caricamenti vengono comunque posizionati correttamente in 2X.

Aha, sì, era quello che intendevo effettivamente. Dovrebbe caricare gli ultimi sette.

Infatti, questa è l’opzione migliore al momento. Copia tutti i file dal loro prefisso /2X/ e sposta tutto in /1X/.

Dopo aver sistemato tutto, ecco un comando che dovrebbe aggiornare tutte le voci del database:

discourse remap --regex "//pesioforum\.doublestack\.s3\.ap-south-1\.amazonaws\.com/original/[1234]X/([0-9a-f]/){0,}" "//pesioforum.doublestack.s3.ap-south-1.amazonaws.com/original/1X/"

(Ricorda il precedente avviso sul creare un backup.)

Dopo di ciò, alcuni post potrebbero richiedere la ricostruzione della versione HTML tramite il menu a chiave inglese. Se ce ne sono più di un paio, puoi ricostruirli tutti con rake posts:rebake.

@schleifer ha funzionato! Con una regex modificata e una rigenerazione di tutti i post, la maggior parte delle immagini e dei file caricati funziona correttamente.
Alcune immagini (non post) puntano ancora a /optimized/, ma possiamo correggerle manualmente. Ad esempio: loghi in diversi temi, ecc.

Grazie mille per il tuo aiuto!

Ciao, abbiamo riscontrato un problema simile nel nostro ambiente e speravamo di ricevere aiuto per risolverlo.

Il nostro problema è simile a questo in molti aspetti:

  1. Abbiamo lo stesso valore elencato sotto s3 upload bucket e s3 backup bucket
  2. Abbiamo riscontrato questo problema durante l’aggiornamento di Discourse:
Versione precedente: v2.3.0.beta3
Nuova versione: v2.5.0.beta6
  1. Ho eseguito l’accesso al container di Discourse e interrogato il database:
SELECT id,url FROM uploads where id > 0 and url not like '//acme-forum.s3.dualstack.us-west-2.amazonaws.com/original/%';
 id |                                                url
----+----------------------------------------------------------------------------------------------------
  1 | /uploads/default/original/1X/eb17xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxc33.png
  2 | /uploads/default/original/1X/b87fxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxv21.png
 78 | //acme-forum.s3-us-west-2.amazonaws.com/original/1X/1205xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxv045.png
(3 righe)
  1. Ho eseguito l’accesso al container di Discourse e interrogato il database:
select url from uploads where url like '//acme-forum.s3.dualstack.us-west-2.amazonaws.com/original/3X/%';
 //acme-forum.s3.dualstack.us-west-2.amazonaws.com/original/3X/6/2/6267xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxf607c.jpeg
(7953 righe)
  1. Ho verificato quanti elementi ci sono in ./original/3X/, la risposta è 251 elementi

Domanda:

  1. Stiamo utilizzando dualstack e non voglio re-mappare i nostri URL per non utilizzarlo.
  2. La nostra struttura delle cartelle è diversa, abbiamo cose come 3X/X/Y (ad esempio 3X/7/a), quindi come posso spostare tutto da default a 3X/*, non verrà comunque mappato correttamente?

Il mio pensiero attuale è scrivere uno script che utilizzi l’output dal Passo 4 per capire dove spostare il file nuovamente nella cartella ./original/3X/X/Y.

L’unico problema è che quando l’ho fatto, dualstack non aveva ancora ospitato questo file. Cosa intendo: quando sostituisco il file in original/3X/X/Y, riesco a vederlo quando vado su:
Non funziona https://acme-forum.s3.dualstack.us-west-2.amazonaws.com/original/3X/6/b/6b6xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxa001.png

Funziona https://acme-forum.s3-us-west-2.amazonaws.com/original/3X/6/b/6b6xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxa001.png

Aggiornamento: si è scoperto che l’endpoint dualstack non era mai stato rotto come pensavo, ho commesso un errore quando ho copiato inizialmente il file immagine in ./original/3X/6/b, dimenticando di abilitare la lettura per tutti.

Quindi la mia domanda è:
Sarebbe un’opzione praticabile per me spostare i file immagine da ./default a ./original/3X/x/y e poi non modificare affatto il database?

Ok, quindi ho un aggiornamento.
Sembra che riesca a prevedere dove dovrebbero andare le immagini ./original, ma non so come risolvere il problema delle immagini ./optimized.

Nel nostro forum, se navighi fino a uno dei nostri post, tenta di visualizzare l’immagine ./optimized.

Esiste un modo per sapere quale sia un’immagine optimized?

Il mio ragionamento è che le immagini ottimizzate terminano con _2_10x10.png; sarebbe un’ipotesi ragionevole? Se è così, sarebbe una soluzione praticabile utilizzare uno script per copiare tutto ciò che contiene qualcosa come _2_10x10.png nella cartella optimized e tutto il resto direttamente nella cartella ./original?

Esempio:

GET https://acme-forum.s3.dualstack.us-west-2.amazonaws.com/optimized/3X/c/c/ccaxxxxxxxxxxxxxxxxxxxxxxxxxxxx85_2_690x268.png
[HTTP/1.1 403 Forbidden 0ms]

Grazie!

@41821 Se gli URL nella tabella uploads sono corretti e funzionanti, ma i post continuano a tentare di caricare le immagini ottimizzate, allora svuotare la tabella optimized_images e rifare il baking di tutti i post dovrebbe risolvere: discourse=> delete from optimized_images;

Grazie mille per il feedback. In realtà ho risolto (se si può chiamare così) scrivendo uno script per spostare l’immagine dalla directory /default a /optimized in base al nome del file. Sembra che abbia funzionato e non ho più alcun problema.

Se dovesse succedere di nuovo in futuro, però, farò come hai suggerito: cancellerò tutto da optimized_images e rifarò il baking.

Grazie!