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?
