`rake uploads:migrate_to_s3` échoue avec `Aws::S3::Errors::SignatureDoesNotMatch`

Le téléchargement de fichiers locaux vers DigitalOcean Spaces (S3) avec rake uploads:migrate_to_s3 démarre et migre certains fichiers, puis échoue soudainement pour un fichier avec l’erreur Aws::S3::Errors::SignatureDoesNotMatch.

Lorsque ce fichier est téléchargé manuellement en utilisant le script mentionné dans Extend S3 configuration for other S3 API compatible services - #4 by rishabh et que le script est relancé, il télécharge plus de fichiers mais échoue à nouveau pour un autre fichier.

Quelqu’un de l’équipe pourrait-il s’en occuper ? J’ai près de 50 Go de fichiers que je dois déplacer du stockage local vers S3 dans un proche avenir (la configuration et le téléchargement des nouveaux fichiers fonctionnent sans problème).

Je serais même satisfait d’une simple solution de contournement pour l’instant : j’ai examiné le code to_s3_migration.rb et je peux identifier les fichiers problématiques, mais lorsque je les télécharge sur S3 en utilisant Aws::S3::Resource à partir du script mentionné ci-dessus, les métadonnées du fichier sont manquantes et le nom original du fichier est perdu lors du téléchargement.

Une recherche sur le web renvoie de nombreux problèmes liés à SignatureDoesNotMatch : l’un d’eux mentionne que la version de l’algorithme de signature utilisé par le gem pourrait être incorrecte, mais cela dépasse mes compétences actuelles pour vérifier.

Voici la configuration pour 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

Il s’est avéré que DO Spaces n’accepte pas les espaces consécutifs dans les métadonnées des fichiers et échoue avec une erreur totalement sans rapport. Peut-être vaut-il la peine de vérifier si AWS S3 impose la même contrainte.

Quoi qu’il en soit, la solution rapide a été de fusionner les espaces multiples en un seul :

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

s’agit-il d’un amendement officiel ? qu’en est-il des autres erreurs lors de la migration vers S3 ?