لدي نسخة احتياطية من الموقع الافتراضي على مثيل متعدد المواقع. يتم تخزين التحميلات على S3. لقد قمت بإنشاء نسخة احتياطية بنجاح مع تعيين include_s3_uploads_in_backups إلى true.
عندما أحاول استعادة هذا من سطر الأوامر على مثيل متعدد المواقع آخر (مع s3) أو تثبيت قياسي جديد، أحصل على خطأ: Something went wrong while remapping uploads.
لقد أضفت مجموعة من puts إلى lib/backup_restore/uploads_restorer.rb وحددت أن هذا سيؤدي إلى الخطأ:
لقد حاولت التعليق على متغيرات S3 المختلفة في discourse.conf لمعرفة ما إذا كانت هناك قيمة سيئة في قاعدة البيانات تسبب المشكلة بطريقة ما، ولكنها كلها فارغة.
هممم. وعلى التثبيت النظيف، فشلت النسخة الاحتياطية والآن يعرض الموقع:
{
errors: [
"`s3_upload_bucket` site setting has to be set."
]
}
لذا ربما تم تعيين إعداد S3 آخر في قاعدة البيانات فاتني. نعم، تم تعيين enable_s3_uploads في قاعدة البيانات. أنا مرتبك بشأن العلاقة بين use_s3 و enable_s3_uploads…
إذًا، تم التأكيد على أن المشكلة كانت أنه قبل بضع سنوات عندما حاولت لأول مرة إعداد S3، قمت بتعيين enable_s3_uploads في قاعدة البيانات، مما تسبب في فشل الاستعادة لأنها تحاول التحميل إلى S3 ولكنها لا تملك معلومات كافية. (تنهد. لكنها تفشل في استعادة المثيل متعدد المواقع/S3 لأن بعض الملفات “لم يتم ترحيلها إلى S3”.)
أتساءل عما إذا كان من المنطقي إخفاء جميع إعدادات تحميلات S3. أنا متأكد من أنه لا يمكن أن يأتي أي خير من تعيينها في تجربة المستخدم. ولكن يمكن أن يكون من المفيد تعيين تحميلات S3 في قاعدة البيانات. . . . ربما.
الذي تم استعادته إلى التثبيت القياسي يفشل في إظهار التحميلات لأنه يقوم بما يلي:
بدأ GET "/uploads/short-url/puhaSNHeEy1S2knGFQIAZ8lprRy.pdf" لـ 68.11.35.109 في 2022-01-25 19:48:06 +0000
معالجة بواسطة UploadsController#show_short كـ PDF
المعلمات: {"base62"=>"puhaSNHeEy1S2knGFQIAZ8lprRy", "extension"=>"pdf"}
تم إرسال الملف /var/www/discourse/public/default/original/1X/b2a283b9381b837234e7d4830b.pdf (4.4ms)
اكتمل خطأ 500 داخلي في 130ms (ActiveRecord: 0.0ms | التخصيصات: 10019)
ActionController::MissingFile (لا يمكن قراءة الملف /var/www/discourse/public/default/original/1X/b2a283b9381b837234e7d4830.pdf)
المسار الذي يبحث عنه هو /var/www/discourse/public/default/original/1X/ بدلاً من /var/www/discourse/public/uploads/default/original/1X/
… . .
وهذا لأنني قمت بإعادة تعيين لمحاولة إصلاح مراجع S3 bucket وهذا كسر المسارات في عناوين URL المحلية.
أعتقد ربما يكون هذا أكثر من اللازم ليكون مفيدًا لأي شخص. على الرغم من أنني ما زلت أعتقد أن إخفاء متغيرات تحميل S3 من تجربة المستخدم فكرة جيدة.