فشل `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 وإعادة تشغيل السكربت، يتم رفع ملفات إضافية لكنه يفشل مرة أخرى في ملف آخر.

هل يمكن لأحد من الفريق الاطلاع على هذه المشكلة؟ لدي ما يقرب من 50 جيجابايت من الملفات التي أحتاج إلى نقلها من التخزين المحلي إلى S3 في المستقبل القريب (يعمل إعداد الملفات الجديدة وتحميلها دون مشاكل).

سأكون سعيدًا حتى لو كان الحل مجرد حل مؤقت: لقد راجعت الكود to_s3_migration.rb وتمكنت من تحديد الملفات المشكلة، لكن عند رفعها إلى S3 باستخدام Aws::S3::Resource من السكربت المذكور أعلاه، تفتقد بيانات وصف الملف (metadata) ويُفقد الاسم الأصلي للملف عند التحميل.

أظهرت نتائج البحث على الويب العديد من المشاكل المتعلقة بـ 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 لديه نفس القيد.

على أي حال، كانت الإصلاح السريع هو دمج المسافات المتعددة في واحدة:

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

هل هذا تعديل رسمي؟ ماذا عن الأخطاء الأخرى في الترحيل إلى S3؟