`rake uploads:migrate_to_s3` が `Aws::S3::Errors::SignatureDoesNotMatch` で失敗

rake uploads:migrate_to_s3 を実行してローカルファイルを DigitalOcean Spaces(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 にアップロードすると、ファイルのメタデータが欠落し、ダウンロード時に元のファイル名が失われてしまいます。

Web 検索で SignatureDoesNotMatch に関する多数の事例が見つかりましたが、そのうちの一つには、使用している gem の署名アルゴリズムのバージョンが間違っている可能性が示唆されていました。ただ、これは私の現在のスキルでは確認が難しいレベルです。

以下が 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 も同様の制約を持っているか確認する価値があるかもしれません。

とにかく、簡単な解決策は複数のスペースを 1 つにまとめることでした:

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

これは公式の修正ですか?S3 への移行における他のエラーについてはどうでしょうか?