`rake uploads:migrate_to_s3` 실행 시 `Aws::S3::Errors::SignatureDoesNotMatch` 오류 발생

로컬 파일을 DigitalOcean Spaces(S3)에 rake uploads:migrate_to_s3로 업로드하면 일부 파일은 정상적으로 마이그레이션이 시작되지만, 갑자기 한 파일에서 Aws::S3::Errors::SignatureDoesNotMatch 오류가 발생하여 실패합니다.

Extend S3 configuration for other S3 API compatible services - #4 by rishabh 에 언급된 스크립트를 사용하여 해당 파일을 수동으로 업로드한 뒤 스크립트를 다시 실행하면 더 많은 파일이 업로드되지만, 또 다른 파일에서 다시 실패합니다.

팀의 누군가 이 문제를 확인해 주실 수 있을까요? 가까운 장래에 로컬 저장소에서 S3로 이동해야 할 파일이 거의 50GB나 됩니다(새 파일의 설정 및 업로드는 문제없이 작동합니다).

지금은 임시 해결책만이라도 있다면 좋겠습니다. to_s3_migration.rb 코드를 살펴보고 문제의 파일들을 식별할 수는 있지만, 위에서 언급한 스크립트의 Aws::S3::Resource를 사용하여 S3에 업로드하면 파일 메타데이터가 누락되고 다운로드 시 파일의 원래 이름이 사라집니다.

웹에서 검색하면 SignatureDoesNotMatch와 관련된 문제가 많이 나오는데, 그 중 하나는 해당 게엠이 사용하는 서명 알고리즘 버전이 잘못되었을 수 있다는 내용입니다. 하지만 이는 제 현재 실력으로 확인하기에는 어렵습니다.

다음은 rake를 위한 설정입니다:

DISCOURSE_S3_ACCESS_KEY_ID="id" \
DISCOURSE_S3_SECRET_ACCESS_KEY="secret" \
DISCOURSE_S3_REGION="sfo2" \
DISCOURSE_S3_BUCKET="mybucket/uploads" \
DISCOURSE_S3_ENDPOINT="https://sfo2.digitaloceanspaces.com" \
DISCOURSE_S3_CDN_URL="https://mybucket.sfo2.cdn.digitaloceanspaces.com" \
rake uploads:migrate_to_s3 --trace

DO Spaces는 파일 메타데이터에서 연속된 공백을 허용하지 않으며, 완전히 무관한 오류로 실패한다는 것이 밝혀졌습니다. 아마도 AWS S3에도 동일한 제약 조건이 있는지 확인해 볼 가치가 있을 것입니다.

어쨌든, 빠른 해결 방법은 여러 공백을 하나의 공백으로 통합하는 것이었습니다:

              %Q{attachment; filename="#{upload.original_filename.gsub(/\s+/, ' ')}"}

이것은 공식적인 수정안인가요? S3로의 마이그레이션 과정에서 발생한 다른 오류는 어떻게 되나요?