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