تحميل الشعار لا يعمل بعد الاستعادة من النسخ الاحتياطي

لقد أنشأت مثيلًا جديدًا من Discourse على نطاق مختلف واستعدته من نسخة احتياطية. سارت جميع الأمور بسلاسة. ومع ذلك، لم تظهر أي من الشعارات (كانت جميعها فارغة، وليست الافتراضية). لذا، انتقلت إلى قائمة “العلامة التجارية” لمحاولة إعادة تحميل الشعارات.

إليك سجل Discourse الخاص بتحميل شعار جديد:

جديد : /uploads/default/original/1X/75a192f211147f512bdddabaf50addd43c6a9d86.png
سابق : /images/discourse-logo-sketch.png

لكن، عند التحقق من مجلد التحميلات الخاصة بي، لا توجد تلك الصورة المحددة:

/var/discourse# tree shared/standalone/uploads/default/ | grep 75a1

لاحظ أن اسم ملف الشعار الخاطئ هذا (التجزئة؟) يطابق الاسم الموجود في مثيل Discord الأصلي الذي لا يزال متصلًا بالإنترنت:

جديد : /uploads/default/original/1X/75a192f211147f512bdddabaf50addd43c6a9d86.png

هل لديك أي فكرة عما حدث خطأ هنا؟ هل يجب علي إنشاء مثيل جديد واستعادته من نسخة احتياطية حديثة؟

شكرًا لك.

نحتاج إلى معرفة المزيد عن بيئتك لنتمكن من مساعدتك هنا.

  • كيف تم تثبيت المثيل الجديد؟
  • هل يقع خلف وكيل عكسي (reverse proxy) أو CloudFlare؟

مرحبًا ستيفن،

  1. تم التثبيت باستخدام سكريبت discourse-setup المستقل.
  2. لا يوجد أي وسيط عكسي (reverse proxy) أو شبكة توصيل محتوى (CDN) متضمنة.

تحديث بسيط حول هذا. لقد قمت بإنشاء مثيل جديد اليوم وتم استعادة الشعارات بنجاح من النسخة الاحتياطية. على الأرجح كان الأمر يتعلق بمشكلة متقطعة من نوع ما.

أعد التفكير، لقد واجهت المشكلة مرة أخرى… إذن، كانت صور الشعار تعمل بشكل جيد حتى قمت بمسح ذاكرة التخزين المؤقت للمتصفح.

الحل

كان السبب الجذري هو أن معظم الصور لم يتم استعادتها بشكل صحيح من النسخة الاحتياطية أثناء عملية الاستعادة. تمكنت من حل المشكلة عن طريق استخراج ملف tar يدويًا ونسخ الصور المفقودة إلى مجلد رفع Discourse.

التحليل

عند محاولة رفع شعار جديد، أرى ما يلي:

  1. يبدو أن رفع الصورة يعمل بشكل جيد:

  1. لكن طلب GET اللاحق لعرض الصورة المرفقة يعطي خطأ 404:

  1. الصورة غير موجودة في مجلد الرفع:
/var/discourse# tree shared/standalone/uploads/default/original/
shared/standalone/uploads/default/original/
`-- 1X
    |-- 52b3aff4e63a7e38bef42d469bafd1ed7c1cc1a2.png
    `-- e952cfd4c1bc58e77024e4c2b518531356319780.png

إليك ما يحتويه ملف النسخة الاحتياطية tarball:

/tmp# tar tvzf ask-tunisians-2020-07-28-042934-v20200728004302.tar.gz 
-rw-r--r-- discourse/www-data 11767008 2020-07-28 04:29 dump.sql.gz
drwxr-xr-x discourse/www-data        0 2020-07-26 21:11 var/www/discourse/public/uploads/default/
drwxr-xr-x discourse/www-data        0 2020-07-26 21:11 var/www/discourse/public/uploads/default/original/
drwxr-xr-x discourse/www-data        0 2020-07-27 20:33 var/www/discourse/public/uploads/default/original/1X/
-rw-r--r-- discourse/www-data    14843 2020-07-26 21:56 var/www/discourse/public/uploads/default/original/1X/7835873085d7323b640c2504cd737b51f370360f.png
-rw-r--r-- discourse/www-data     9039 2020-07-27 20:33 var/www/discourse/public/uploads/default/original/1X/75a192f211147f512bdddabaf50addd43c6a9d86.png
-rw-r--r-- discourse/www-data     5783 2020-07-26 21:56 var/www/discourse/public/uploads/default/original/1X/19629775936660ecc73235158b4d68b9ec4b2abe.png
-rw-r--r-- discourse/www-data    11124 2020-07-26 21:11 var/www/discourse/public/uploads/default/original/1X/e952cfd4c1bc58e77024e4c2b518531356319780.png
-rw-r--r-- discourse/www-data    35570 2020-07-26 21:11 var/www/discourse/public/uploads/default/original/1X/52b3aff4e63a7e38bef42d469bafd1ed7c1cc1a2.png
-rw-r--r-- discourse/www-data     2375 2020-07-26 21:56 var/www/discourse/public/uploads/default/original/1X/d4af3550a7c3f857c974b996257c8e3db72e7850.png
-rw-r--r-- discourse/www-data     9759 2020-07-26 22:14 var/www/discourse/public/uploads/default/original/1X/dfc47da4c22ffeddf59f736a46a2c50ee55d7fa1.png
-rw-r--r-- discourse/www-data    24898 2020-07-26 21:46 var/www/discourse/public/uploads/default/original/1X/d832b24f2cb338139984be98045d22e0af093c4a.png

من الواضح أن الصور كانت موجودة، لكن السؤال هو: لماذا لم يتم نسخ معظم الصور بشكل صحيح كجزء من عملية الاستعادة؟