تحديث جديد - لقد تمكنت في النهاية من جعله يعمل. قد تساعد بعض الدروس المستفادة الآخرين، ومن هنا جاء الشرح المفصل أدناه. قد يكون خطأ صلاحيات يونكس (Unix permissions) جديرًا بالإضافة إلى المنشور الأصلي.
صلاحيات يونكس على مجلد المرفقات
كان مستورد SMF2 يعمل بشكل جيد ولكن كانت هناك مشكلة بسيطة تتعلق بصلاحيات يونكس للمرفقات. عند تشغيل سكربت الاستيراد، فإنه يعمل كمستخدم discourse، والذي لا يمتلك بالضرورة صلاحيات القراءة والكتابة على تثبيت وحدة تخزين المرفقات.
أثناء الاستيراد، يبدو أن المستورد ينشئ ملفات مؤقتة صغيرة في نفس الدليل، لذلك يجب عليك التأكد من أن المستخدم الصحيح لديه صلاحيات القراءة والكتابة. لقد فعلت ذلك عن طريق تغيير مالك (chown) الدليل على المضيف بشكل متكرر إلى المستخدم discourse، ولكن هناك طرق أخرى بما في ذلك تعيين صلاحيات مفتوحة جدًا، أو استخدام قوائم التحكم في الوصول (Access Control Lists).
تصحيح الأخطاء في عمليات التحميل الفاشلة أمر صعب
إذا فشل مستورد SMF2 في تحميل مرفق لأي سبب كان، فإنه يبلغ عن الفشل بنفس الطريقة، لذلك قد يكون من الصعب معرفة سبب فشل المرفق/التحميل.
يمكن أن تشمل الأسباب:
- المرفقات في المكان الخاطئ على نظام الملفات.
- صلاحيات المرفقات غير كافية (تحتاج إلى
rw). - تثبيت وحدة تخزين Docker غير معد بشكل صحيح.
- قاعدة بيانات SMF2 تُبلغ عن وجود مرفق لم يعد موجودًا في مجلد المرفقات الخاص بك (في منتدى SMF2 الخاص بنا، والذي يبلغ عمره حوالي 20 عامًا، كانت هناك العديد من المرفقات ‘المفقودة’ - لا يوجد الكثير مما يمكنك فعله حيال هذه…)
- كائن التحميل لا يتم حفظه بشكل صحيح في قاعدة بيانات Discourse أو على القرص في
/shared/standalone/uploads - رابط التحميل في ماركداون (markdown) لا يتم إنشاؤه.
لقد قمت بتصحيح هذا عن طريق اختبار كل خطوة من عملية المرفقات من البداية إلى النهاية وإضافة عدد كبير من عبارات puts الإضافية للتصحيح في كود smf2.rb، لمعرفة الجزء الذي لم يكن يعمل في عملية إنشاء التحميل. في حالتي، كانت هناك العديد من المشكلات الصغيرة التي تم حلها تدريجيًا واحدة تلو الأخرى.
لا تكن كسولاً يا ماركوس
وفي النهاية، أصبحت كسولاً ولم أكن أقوم بمسح قاعدة البيانات بالكامل إلى الصفر، لذلك واجهت مشكلة أن كل شيء كان ينجح - ولكن المستورد لا يستبدل موضوعًا أو مشاركة تم استيرادها بالفعل. لذلك لم يتم إدراج ماركداون الذي يشير إلى التحميل، والذي يجب أن يبدو كالتالي:
---

في المشاركات.
اختباره للتأكد من أنه يعمل
الطريقة التي وجدتها لاختبار ما إذا كان كل هذا يعمل من البداية إلى النهاية كانت تشغيل الأمر
Post.where("raw LIKE ?", "%upload://%").count
في وحدة تحكم Rails. كان هذا يعيد عدد المشاركات التي تحتوي فعليًا على رابط تحميل صحيح فيها، وهذا العدد يزداد تدريجيًا طوال عملية الاستيراد.