로고 이미지로 인해 Migrate_to_s3 실패

기존 사이트의 업로드 저장 방식을 로컬에서 S3로 변경하고 있으며, 이 가이드를 따르고 있습니다. 새로운 업로드는 정상적으로 작동하며, 수동 확인을 통해 S3에 표시되는 것을 확인했습니다. 그러나 rake uploads:migrate_to_s3를 실행하려고 하면 다음과 같은 출력이 표시됩니다:

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)

에러가 발생한 파일인 lib/file_store/to_s3_migration.rb를 확인해 보니, uploads 테이블에서 url NOT LIKE '//%' AND url NOT LIKE '/%#{seeded_image_url}%' 조건을 만족하는 행에 대해 체크를 실행하는 것으로 보입니다. 제 경우 seeded_image_url은 uploads/default/original/_X/로 해석될 것으로 추정합니다.

같은 체크를 데이터베이스에서 수동으로 실행해 보니 다음과 같은 결과가 나왔습니다:


아래 두 항목은 걱정하지 않습니다. 전환 과정에서 생긴 우연한 산물일 것으로 추측되며, url이 없다면 사이트가 해당 파일을 찾을 위치를 모를 것이므로 안전하게 삭제할 수 있을 것입니다. 하지만 로고에 대해서는 더 걱정됩니다. 이는 실제로 여전히 사용 중인 기본 로고인데, 업로드된 것이 아니라 코드베이스와 함께 배포되는 파일입니다.

to_s3_migration.rb의 146번째 줄에 URL 컬럼이 /images/로 시작하는 업로드도 무시하도록 하는 세 번째 조건을 추가하는 것이 안전할까요? 아니면 이제 업로드와 별도로 처리되는 파일들이므로 해당 행을 그냥 삭제해야 하나요? 이는 이전 버전의 Discourse에서 남은 산물일 수 있습니다. 아니면 Rails에 익숙하지 않아 태스크가 수행하는 내용을 오해하고 있는 것일까요? 문제의 원인이 다른 곳에 있을까요?

다음 날 돌아와서 다시 시도해 보니 migrate 작업이 정상적으로 실행되었습니다. 로고 이미지가 문제가 아니었고, 그저 그 두 개의 불필요한 이미지 때문이었나 봅니다. 아마도 어떤 주기적 작업에 의해 정리되었을 텐데, 지금 보니 이미 사라져 있습니다.

사후적으로 살펴보면, 업로드 작업은 다음과 같은 방식으로 잘못된 업로드 URL을 확인합니다.

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

아마도 로고 이미지는 유효한 user_id가 없기 때문에 by_users가 그들을 무시하도록 만드는 원인이겠지요.