فقدان الصور في النسخ الاحتياطي/الاستعادة، تغيير النطاق، عدم القدرة على تحميل صور جديدة

كانت مجموعتنا تشغّل منصة Discourse على نطاق مؤقت لمدة شهرين حتى اتفقنا على اسم النطاق الفعلي الخاص بنا. أمس، حاولت نقل جميع المحتويات من النطاق القديم إلى النطاق الجديد. تم نقل جميع المحتويات النصية وحسابات المستخدمين وحتى الروابط بين المواضيع بشكل صحيح. ولكن الآن:

  • يبدو أن جميع مضمنات الصور القديمة قد فقدت.
  • لا يمكن رفع صور جديدة.

كانت عمليةي كالتالي:

  • قمت بإنشاء تطبيق Discourse جديد على خادم DigitalOcean جديد.
  • ربطت اسم النطاق الجديد بهذا الخادم الجديد.
  • تأكدت من أن تطبيقَي Discourse والإضافات كانت محدثة بأحدث إصدارات البرمجيات المتاحة.
  • وضعت تطبيق Discourse القديم في وضع القراءة فقط لمنع إضافة أي محتوى جديد.
  • قمت بنسخ احتياطي لتطبيق Discourse القديم.
  • رفعت النسخة الاحتياطية إلى تطبيق Discourse الجديد.
  • قمت بتحديث عنوان البريد الإلكتروني لتطبيق Discourse من بريد النطاق القديم إلى بريد النطاق الجديد.
  • أجريت اختبارًا للإشعارات، وعملت بشكل صحيح في تطبيق Discourse الجديد.
  • تصفحت جميع إعدادات Discourse لتحديث أي ذكر للنطاق القديم بالنطاق الجديد.
  • قمت بتغيير النطاق الجزئي القديم ليُعيد التوجيه إلى نطاقه الصحيح، وأضفت مؤقتًا ملاحظة ورابطًا إلى تطبيق Discourse الجديد هناك.

كما هو مذكور أعلاه، بدا أن معظم المحتوى قد تم نقله بسلاسة. ولكن الآن، بعد مرور يوم، لاحظنا أن مضمنات الصور القديمة قد فقدت، ولا يمكن رفع صور جديدة. يظهر فقط محتوى “alt” الخاص بها. فيما يلي لقطة شاشة لمثال:

عند البحث في جوجل، يبدو أن هناك عدة مواضيع مطولة حول هذه المشكلة، لكنني لم أجد موضوعًا يتضمن تغيير اسم النطاق وعدم القدرة على إعادة الرفع.

حاولت للتو حل هذه المشكلة عن طريق:

  • الدخول إلى الجهاز عبر SSH.
  • الانتقال إلى مجلد Discourse والدخول إلى التطبيق.
  • تشغيل أمر rake posts:missing_uploads. وقد أفاد الأمر بما يلي:
Looking for missing uploads on: default

0 post uploads are missing.
  • تشغيل أمر rake uploads:missing. وقد أفاد الأمر بقائمة طويلة:
/var/www/discourse/public/uploads/default/original/1X/bbc547e72f080561282be277749165709cbb0983.ico
/var/www/discourse/public/uploads/default/original/1X/0a421ccd1a08047895e2355f44c332f8b069107d.jpeg
/var/www/discourse/public/uploads/default/original/1X/034e0353b7558a26252c82982de53002fda0a33f.jpeg

[…]

/var/www/discourse/public/uploads/default/original/1X/f7a6164ffa55af4ee2706d2386227183ef6c2d61.png
96 of 281 uploads are missing
/var/www/discourse/public/uploads/default/optimized/1X/997bc5536763d84a8d035ff7becd98277a158680_2_45x45.png

[…]

/var/www/discourse/public/uploads/default/optimized/1X/8944afba36549c9050ef074b391625ef93d4d0e3_2_1035x582.jpeg
/var/www/discourse/public/uploads/default/optimized/1X/8944afba36549c9050ef074b391625ef93d4d0e3_2_10x10.png
247 of 761 optimized_images are missing
  • تشغيل أمر rake uploads:recover_from_tombstone. ولم ينتج هذا الأمر أي مخرجات.

أعترف أنني لا أعرف ما الذي تفعله أوامر Rake هذه.

يمكنني أيضًا رؤية أن DISCOURSE_HOSTNAME في ملف containers/app.yml هو النطاق الجزئي والنطاق الصحيح (الجديد).

يبدو أن تشغيل الأمر ./launcher rebuild app لا يغير شيئًا.

هل يمكن لأي شخص المساعدة، من فضلك؟ شكرًا لك.

هل جربت إعادة التحميص؟

cd /var/discourse
./launcher enter app
rake posts:rebake

شكرًا على الاقتراح. لقد أدخلت الأوامر الخاصة بك للتو، ولا أرى أي فرق. الصور القديمة لا تزال غير مرئية، والصور الجديدة لا تزال تفشل في الرفع. بالمناسبة، يُظهر وحدة تحكم متصفح الويب خطأ “GET 404” بعد إكمال محاولة الرفع.

تحديث:

لا أعرف الأمر المحدد الذي حسّن الوضع، لكنه تحسّن رغم أنه لم يُحلّ بعد.

  • يمكنني إنشاء ورفْع ملفات جديدة من أنواع TXT و DOCX و XLSX و JPG و PNG.
  • معظم (وليس جميع) التحميلات القديمة من جميع الأنواع تُعرض وتُحمّل الآن بشكل صحيح.

كانت التحميلات «الخارجة عن السيطرة» تُعرض وتُحمّل بشكل جيد سابقًا دون أي مشكلة. وهي ترفض الظهور بعد إعادة رفعها في منشورات اختبارية جديدة. كمثال:

هذه الصورة: https://www.frontiersin.org/files/Articles/470644/fphys-10-00944-HTML-r1/image_m/fphys-10-00944-t001.jpg

تُعرض بشكل صحيح (في نظام Discourse الخاص بي) عند إدخال الرابط في سطر منفصل، كما هو موضح أدناه:

لكنها تختفي من المنشور بعد الانتهاء من كتابته وتحديث الصفحة، تاركة ما يبدو أنه سطر فارغ واحد فقط. عند فحص مصدر الصفحة، يظهر عنصر صورة مع سمة SRC مضبوطة على مسار في نطاق موقعي بصيغة https://discourse.my_domain_name.org/uploads/default/original/1X/61ae2bdeff3dfe334ad6803409560b667d7dc246.jpeg. وعند فتح هذا المسار في علامة تبويب جديدة، تظهر صفحة خطأ NGINX 404.

عند تنزيل الصورة من مصدرها الأصلي إلى حاسوبي المحمول ثم رفعها إلى نظام Discourse الخاص بي (كما سأفعل هنا في هذا المنشور أدناه)، تفشل في الظهور على نظام Discourse الخاص بي.

على نظام Discourse الخاص بي، تظهر بهذا الشكل:

وعند الضغط بالتحكم (Control-click) على الصورة الفاشلة واختيار “فتح الصورة في علامة تبويب جديدة”، تظهر صفحة خطأ NGINX 404.

ألاحظ في مربع الحوار الحالي أن نظام Discourse يغيّر امتداد الصورة من JPG إلى JPEG، لكنني لا أعتقد أن هذا سيؤثر.

إذا فتحت الصورة المُحمّلة في تطبيق Affinity Photo، وصدرتها بدون ضغط بصيغة JPG جديدة، ثم أعيدت رفعها إلى نظام Discourse الخاص بي، فإنها تُعرض بشكل صحيح على نظام Discourse الخاص بي.

هذا يوحي لي بأن المشكلة لا تزال في نظام Discourse الخاص بي، وليس في الملفات المرفوعة.

واجهت هذه المشكلة أثناء عملية النقل الأخيرة.

أسهل طريقة غير تقنية لحلها هي تسجيل الدخول إلى موقعك الأصلي أو استضافتك باستخدام FileZilla، ثم التنقل إلى

VAR/Discourse/Uploads

ستجد هنا مجلدات فرعية تحتوي على صور. قمت ببساطة بتنزيلها من المضيف الأصلي ورفعها إلى المضيف الجديد.

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

شكرًا لك على الرد. لم أستخدم تطبيق FileZilla من قبل؛ فأنا أستخدم تطبيق Transmit لبروتوكول FTP. لكنني لا أعرف كيفية الاتصال بتطبيق Discourse الخاص بي على خادم DigitalOcean السحابي (Droplet) باستخدام FTP.

أستطيع الدخول عبر SSH إلى الخادم السحابي الخاص بي، وأستطيع التنقل إلى /var/discourse/، لكن لا يوجد هناك مجلد uploads.

حتى لو قمت بنقل ملفات الصور يدويًا من الموقع القديم إلى الموقع الجديد، فكيف سيحل ذلك مشكلة فشل إعادة رفع نفس الصور؟

فهمي الأساسي جدًا لمنصة Discourse (وأنا مبتدئ تمامًا) هو أن الصور المرفوعة تُخزَّن على موقعك، ويتم أيضًا تخزين نسخة منها بحجم ملف محسَّن. في البداية، تُعرض الصورة الأصلية للمستخدمين، وفي مرحلة ما ينتقل المنتدى إلى عرض الصورة المحسَّنة (يبدو لي أن ذلك يحدث بعد 24 ساعة).

لقد قمت ببعض التجارب على الإعدادات لأنني كنت قلقًا من نفاد مساحة التخزين.

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

مشكلتي عند نقل الاستضافة من Digital Ocean إلى Hetzner كانت أن بعض الصور (والصور الرمزية) لم تظهر ببساطة (مشابهة للقططة الأولى التي شاركتها). كان حلّي هو نقلها عبر بروتوكول FTP (حلاً بدائيًا لكنه نجح). لست متأكدًا تمامًا من السبب. في البداية، نقلت فقط الصور المحسَّنة ولم يحل ذلك المشكلة، لكن عندما نقلت جميع الصور تم حل مشكلتي.

أعتذر عن الخطأ في اسم المجلد؛ لقد كنت أتذكره من الذاكرة. هيكل المجلدات هو: VAR/Discours/Shared/Standalone/Upload

من السهل جدًا تسجيل الدخول باستخدام عميل FTP مع Digital Ocean:

المضيف: عنوان IP لمنصة Discourse
المنفذ: 22
اسم المستخدم: root
كلمة المرور: كلمة مرور SSH الخاصة بك

وكما قلت، أنا بعيد كل البعد عن كوني خبيرًا، بل شخصًا قام ببعض التعديلات عليها خلال الأشهر القليلة الماضية.

يوجد هنا أشخاص يمكنهم تقديم نصائح ورؤى أفضل. لكن إذا لم تنجح أي من الطرق الأخرى، فقد يكون من الجدير تجربة نهجي.

كان حلّي هو نقل الملفات عبر FTP (طريقة بدائية لكنها نجحت). لست متأكداً بنسبة 100% من السبب. في البداية، نقلت فقط الصور المُحسَّنة ولم يحلّ ذلك المشكلة، لكن عندما نقلت جميع الصور، تم حل مشكلتي.

شكراً لك على التفاصيل الأكثر دقة حول كيفية الدخول عبر FTP إلى منتدياتي (Discourse) الثنائية. كان مجلد uploads بحجم حوالي 125 ميجابايت في منتدى Discourse القديم، و60 ميجابايت في الجديد. لذا، قمت بنسخ النسخة القديمة إلى سطح مكتب حاسوبي المحمول. ثم قمت بنسخ محتوياته، مجلداً مجلداً، إلى منتدى Discourse الجديد، متجاوزاً أي تكرارات.

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

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

شكراً جزيلاً مرة أخرى.

افتراضيًا، لا تتضمن النسخ الاحتياطية الصور المحسّنة لأنه يمكن إعادة إنشائها. إدراجها سيؤدي إلى إهدار عرض النطاق الترددي ومساحة القرص.

في حالتك، كان من المفيد إدراجها عن طريق تمكين إعداد الموقع include_thumbnails_in_backups قبل إنشاء النسخة الاحتياطية.

كحل بديل، كان يمكن أن ينجح تشغيل الأمر rake posts:rebake_uncooked_posts بعد الاستعادة أيضًا. وإلا فإن الصور المحسّنة يتم إعادة إنشائها بواسطة مهمة في الخلفية، لكن هذا يستغرق بعض الوقت… يوجد رسالة سجل في نهاية الاستعادة تخبرك بذلك تمامًا.