Migrate_to_s3 fallisce a causa delle immagini del logo

Sto spostando un sito esistente dall’archiviazione locale dei caricamenti all’archiviazione in S3, seguendo questa guida. Tutto funziona bene per i nuovi caricamenti, ho confermato che sono visibili in S3 controllando manualmente. Tuttavia, quando tento di eseguire rake uploads:migrate_to_s3 ottengo il seguente output:

Si prega di notare che la migrazione a S3 non è attualmente reversibile!
[CTRL+c] per annullare, [ENTER] per continuare

Migrazione dei caricamenti a S3 per 'default'...
Alcuni caricamenti non sono stati migrati al nuovo schema. Esecuzione della migrazione, potrebbe richiedere del tempo...
rake aborted!
FileStore::ToS3MigrationError: Alcuni caricamenti non hanno potuto essere migrati al nuovo schema. È necessario correggerli manualmente.
/var/www/discourse/lib/file_store/to_s3_migration.rb:162:in `migrate_to_s3'
/var/www/discourse/lib/file_store/to_s3_migration.rb:65:in `migrate'
/var/www/discourse/lib/tasks/uploads.rake:127:in `migrate_to_s3'
/var/www/discourse/lib/tasks/uploads.rake:106:in `block in migrate_to_s3_all_sites'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rails_multisite-4.0.1/lib/rails_multisite/connection_management.rb:80:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rails_multisite-4.0.1/lib/rails_multisite/connection_management.rb:90:in `each_connection'
/var/www/discourse/lib/tasks/uploads.rake:104:in `migrate_to_s3_all_sites'
/var/www/discourse/lib/tasks/uploads.rake:100:in `block in <main>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
Tasks: TOP => uploads:migrate_to_s3
(Vedi il trace completo eseguendo il task con --trace)

Guardando nel file in cui ha origine l’errore, lib/file_store/to_s3_migration.rb, vedo che sembra eseguire un controllo sulla tabella uploads per le righe in cui url NOT LIKE '//%' AND url NOT LIKE '/%#{seeded_image_url}%'. Nel mio caso presumo che seeded_image_url si risolva in uploads/default/original/_X/.

Ho eseguito manualmente lo stesso controllo sul database e ho trovato quanto segue:


Le due righe in basso non mi preoccupano, immagino siano solo artefatti casuali del passaggio - se non hanno un url allora presumibilmente il sito non sa dove trovarli, quindi possono essere rimossi in sicurezza. Sono più preoccupato per i loghi, però. Questi sono i loghi predefiniti, che stiamo ancora utilizzando, ma sono distribuiti con il codice sorgente anziché caricati.

È sicuro aggiungere una terza condizione in to_s3_migration.rb, riga 146, che ignori anche i caricamenti in cui la colonna URL inizia con /images/? Oppure dovrei semplicemente eliminare quelle righe perché quei file vengono gestiti separatamente dai caricamenti ora, e questo è solo un artefatto di una versione precedente di Discourse? Oppure ho frainteso cosa sta facendo il task (non ho molta familiarità con Rails) e il problema è qualcos’altro?

1 Mi Piace

Sono tornato il giorno dopo e ho riprovato, e il task di migrazione ha funzionato bene. Suppongo che le immagini del logo non siano mai state il problema, e fossero solo quelle due esterne. Presumibilmente sono state eliminate da qualche tipo di task periodico, perché ora che guardo sono sparite.

Ripensandoci, il task di upload controlla gli URL di upload non validi con:

Upload.by_users.where("url NOT LIKE '//%' AND url NOT LIKE '/%#{seeded_image_url}%'").exists?

Presumibilmente è by_users che fa ignorare le immagini del logo, dato che quelle non hanno un user_id valido.

3 Mi Piace