نقل قاعدة بيانات vBulletin 5 - أخطاء استيراد المرفقات حول امتداد المرفق

لقد قمت باستيراد منتدى vBulletin 5 الخاص بي بنجاح إلى Discourse. بينما يعمل برنامج نصي للاستيراد بشكل عام بشكل جيد، أواجه أخطاء عند استيراد المرفقات. يتم تخزين المرفقات في قاعدة البيانات الخاصة بي وتشمل الامتدادات التالية: java و html و jpg و png و txt و rtf و zip و js و xml.

عند تصحيح إجراء import_attachment، اكتشفت أنه يتم استيراد المرفقات ذات الامتداد java فقط بشكل صحيح. يفشل البرنامج النصي للمرفقات ذات الامتدادات الأخرى.

هل واجه أي شخص آخر في المجتمع مشاكل عند استيراد المرفقات ذات امتدادات الملفات هذه؟ هل لدى أي شخص رؤى حول سبب فشل البرنامج النصي مع هذه الأنواع من الملفات؟

إليك نظرة عامة موجزة على المشكلة:

  • الملفات الثلاثة الأولى في قاعدة البيانات الخاصة بي لها امتداد java ويتم استيرادها دون مشاكل.
  • يفشل البرنامج النصي عند مواجهة ملف بامتداد jpg.

@pfaffman أي نصائح أو حلول ستكون موضع تقدير كبير!

ستحتاج إلى إضافة بعض عبارات التصحيح لرؤية ما يحدث.

لقد أضفت عبارة تصحيح الأخطاء على upl_obj

     begin
        upl_obj = create_upload(post.user.id, filename, real_filename)

        if upl_obj&.persisted?
          html = html_for_upload(upl_obj, real_filename)
          if !post.raw[html]
            post.raw += "\n\n#{html}\n\n"
            post.save!
            UploadReference.ensure_exist!(upload_ids: [upl_obj.id], target: post)
          end
        else
          puts "Failed to create upload for #{filename}: #{upl_obj.errors.full_messages.join(", ")}"
          next
        end
      rescue => e
        puts "Error processing file #{filename}: #{e.message}"
        next
      end

وشاهدت هذه الأخطاء

هذه الأخطاء تتعلق بالامتدادات jpg, jpeg, png, PNG, gif

هل لديك أي فكرة عن هذه الأخطاء؟ @pfaffman

الملفات الوحيدة التي عملت هي ascii. تخميني هو خطأ في الترميز.

هل هناك مشكلة في الملفات في قاعدة البيانات أم مشكلة في ترميز نص الاستيراد؟ @pfaffman


انظر إلى هذه الملفات إذا كانت ملفات أخرى مشفرة فلماذا لا تكون هذه الامتدادات مثل jpg و png وما إلى ذلك؟

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

لذا فهي ليست مشكلة Discourse، بل مشكلة mysql.

إعجاب واحد (1)

تقريبًا - ليس ترميز السطر الجديد، بل تم التعامل معها كنص، وبالتالي تم إتلافها.

EF BF BD هو تسلسل البايت في UTF-8 لـ “حرف الاستبدال” (U+FFFD). هذا يشير إلى أن الملف تم التعامل معه كنص بدلاً من ملف ثنائي.

تبدأ صورة JPEG بـ ff d8 ff e0 xx xx 4a 46 49 46 00

يمكنك أن ترى أن البايتات الأربعة الأولى قد تم استبدال كل منها بـ EF BF BD.

لذلك صورك تالفة بالفعل. هذه ليست مشكلة في المستورد، هذه مشكلة في قاعدة البيانات، كما قال @pfaffman بالفعل. إذا كنت قد نسخت قاعدة البيانات هذه من خادم آخر، فقد ترغب في التحقق مما إذا كانت هذه مشكلة بالفعل في قاعدة البيانات الأصلية. قد يحدث هذا أيضًا فقط مع أقدم الصور (إذا حدث هذا منذ فترة طويلة). فقط قم بإزالة exit السطر وانظر ماذا يحدث.

إعجاب واحد (1)

@RGJ شكراً للمساعدة. لقد حاولت استيراد قاعدة بيانات جديدة بالصور الصحيحة، وبينما تم الاستيراد، لم يتم استيراد جميع المرفقات بالكامل. أواجه أخطاء مثل هذه:

هل لديك فكرة عن سبب حدوث ذلك؟ @RGJ @pfaffman

تظهر المشاركات بهذا الشكل، وهناك العديد من الحالات:

لا أعتقد أن المستورد يمكنه التعامل مع تلك.
إذا كنت أتذكر بشكل صحيح، فسيتم إزالة جميع علامات [ATTACH] من المشاركات لأنها زائدة عن الحاجة. من المحتمل أن هذا لا يعمل هنا لأنه لا يتوقع بيانات JSON بداخله. سيكون الأمر مجرد البحث عن المكان الذي تتم فيه إزالتها وتعديل هذا الرمز لاستيعاب بيانات JSON داخل العلامة.

قبل استيراد المرفقات، لاحظت أن المشاركات التي تحتوي على صور تحتوي على علامات [ATTACH]. بعد الاستيراد، يتم ملء بعض هذه العلامات بشكل صحيح بينما تظل علامات أخرى فارغة. لماذا يحدث ذلك؟

كما قلت، تلك العلامات زائدة عن الحاجة، لكن منطق إزالة العلامات لا يتوقع رمز JSON هذا، لذا فهو لا يزيلها بشكل صحيح.

ألا تظهر أي من تلك الصور؟

أعتقد أن بعض vBulletin يرفقها بإضافتها إلى قاعدة البيانات والبعض الآخر يتضمن bbcode مثل ذلك. أعتقد أنني قمت بتعديل المستورد للتعامل مع تلك من قبل.

نعم، هذه لا تظهر.
لقد واجهت أخطاء في 1000 مرفق من أصل 12.5 ألف.
كيف يمكنني تحميلها؟

لم ألاحظ ملفات JSON من قبل. هل تتوقع أن تكون ملفات JSON هذه مرفقات مضمنة في المنشورات؟ كيف تبدو تلك المنشورات في vBulletin؟

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

لا أعتقد أن هذه ملفات JSON، إنها بيانات وصفية لـ JSON.
يبدو أن vBulletin قد غيّر ترميز مواقع المرفقات من

[attach]123[/attach]

إلى

[attach=json]{"data-attachmentid":123}[/attach]

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

الكثير من الأخطاء الأخرى في لقطة الشاشة أعلاه مستقلة عن هذه المشكلة.

إعجاب واحد (1)

اعتقدت أنني رأيت أن قاعدة البيانات أحيانًا تربطها بالمنشور وأحيانًا يفعل كود BB، وأعتقد أن كليهما يفعل ذلك أحيانًا؟ وأحيانًا تكون موجودة في قاعدة البيانات وأحيانًا تكون ملفات خارجية (لكن قد أكون أتذكر نظامًا آخر بشأن ذلك).

نعم، هذا صحيح تقريبًا. ولكن على حد علمي، في vBulletin 5 يكون الأمر دائمًا عبر قاعدة البيانات.

إعجاب واحد (1)