I’m moving an existing site from storing uploads locally to storing them in S3, following this guide. Everything is working fine for new uploads, I have confirmed that they are showing up in S3 by checking manually. However, when I attempt to run rake uploads:migrate_to_s3
I get the following output:
Please note that migrating to S3 is currently not reversible!
[CTRL+c] to cancel, [ENTER] to continue
Migrating uploads to S3 for 'default'...
Some uploads were not migrated to the new scheme. Running the migration, this may take a while...
rake aborted!
FileStore::ToS3MigrationError: Some uploads could not be migrated to the new scheme. You need to fix this manually.
/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
(See full trace by running task with --trace)
Looking in the file where the error originates, lib/file_store/to_s3_migration.rb
, I see that it seems to be running a check against the uploads
table for rows where url NOT LIKE '//%' AND url NOT LIKE '/%#{seeded_image_url}%'
. In my case I assume seeded_image_url
resolves to uploads/default/original/_X/
.
I ran the same check against the database manually, and found the following:
The bottom two I’m not worried about, I’m guessing those are just fluke artifacts of the switch - if they have no
url
then presumably the site doesn’t know where to find them so they can be safely removed. I’m more concerned about the logos, though. These are the default logos, which we are actually still using, but they’re distributed with the codebase rather than uploaded.
Is it safe to add a third condition in to_s3_migration.rb
, line 146, that also ignores uploads where the URL column starts with /images/
? Or should I just delete those rows because those files are handled separately from uploads now, and that’s just an artifact from an older version of Discourse? Or have I misunderstood what the task is doing (not super familiar with Rails) and the problem is something else?