خطأ في استيراد vBulletin 5 (حرف غير صالح في حقل الموقع) وسؤال سريع حول المرفقات

مرحبًا يا أصدقاء!

بعد استيراد منتداي القديم الأول من phpbb قبل 3 سنوات، يسعدني أني حفزت مدير منتدى دولي على نقل منتدى آخر أكبر (يضم 180,000 عضو و1.6 مليون رسالة) إلى Discourse. :tada:

يستخدم هذا المنتدى vBulletin5.

عملية الاستيراد سارت على ما يرام حتى العضو رقم 71712، والسبب هو وجود أحرف غير صالحة في حقل الموقع:

:website=>"http://url-redacted.com - æåñòêîå ïîðíî ñìîòðåòü îíëàéí",

رسالتا الخطأ الناتجتان:

1: from /usr/local/rvm/rubies/ruby-2.6.5/lib/ruby/2.6.0/uri/rfc3986_parser.rb:73:in `parse' /usr/local/rvm/rubies/ruby-2.6.5/lib/ruby/2.6.0/uri/rfc3986_parser.rb:21:in `split': URI must be ascii only "http://url-redacted.com - \u00E6\u00E5\u00F1\u00F2\u00EA\u00EE\u00E5 \u00EF\u00EE\u00F0\u00ED\u00EE \u00F1\u00EC\u00EE\u00F2\u00F0\u00E5\u00F2\u00FC \u00EE\u00ED\u00EB\u00E0\u00E9\u00ED" (URI::InvalidURIError)

و:

1: from /usr/local/rvm/gems/ruby-2.6.5/gems/addressable-2.7.0/lib/addressable/uri.rb:2394:in `defer_validation' /usr/local/rvm/gems/ruby-2.6.5/gems/addressable-2.7.0/lib/addressable/uri.rb:2475:in `validate': Invalid character in host: 'url-redacted.com.com - æåñòêîå ïîðíî ñìîòðåòü îíëàéí' (Addressable::URI::InvalidURIError)

إذا كان على الرابط “أن يحتوي على أحرف ASCII فقط”، فربما يمكن حذف محتوى الحقل أو تنظيفه بدلاً من إظهار خطأ وإيقاف السكربت؟ :thinking:
سأحاول إزالة هذا المستخدم من قاعدة البيانات قبل محاولة الاستيراد مرة أخرى.

بالإضافة إلى ذلك، لدي سؤال آخر. تُخزَّن الصور الرمزية (Avatars) في قاعدة البيانات وقد تم استيرادها بنجاح.

لكن ماذا عن المرفقات؟ في حالتي، هي أيضًا مخزنة في قاعدة البيانات كما هو معتاد افتراضيًا مع vBulletin. هل سيتم استيرادها، أم يجب تخزينها كحقول منفصلة؟

مرحبًا @Canapin

عندما قمنا بنقل منتدى vB3 القديم، واجهنا العديد من الأخطاء في سكريبت النقل بسبب بعض الرموز المشفرة بشكل خاطئ أو بعض المرفقات الغريبة التي كانت تلوث قاعدة البيانات بعد 15 عامًا من المنشورات.

ما فعلته، رغم أنه ليس أنيقًا جدًا، لكنه نجح معنا:

عندما واجهنا هذه الأخطاء، قمت ببساطة بتحرير سكريبت النقل في الأماكن التي حدث فيها الخطأ، وقمت بتغليف السطر المعني باستخدام:

begin
# السطر الروبي المعني هنا
rescue
puts "هنا بعض المعلومات المثيرة للاهتمام حول الخطأ"
end

تجربتي في نقل حوالي مليون منشور من vB3 إلى Discourse كانت أن أحد أفضل أصدقائي كان:

begin
rescue
end

لقد فقدنا بعض المنشورات غير الصحيحة، لكن هذا كان مقبولًا بالنسبة لي للتخلي عن حفنة من المنشورات من بين مليون.

أتمنى أن يكون هذا مفيدًا.

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

لذلك، ليست مشكلة كبيرة إذا لم يتم إصلاحها في كود السكربت في النهاية، رغم أنه سيكون من الجيد ألا يعيق ذلك عملية الاستيراد :wink:

أما بالنسبة للمرفقات، فسأحاول استيراد الرسائل على أي حال وسأرى ما إذا تم استيراد المرفقات أم لا (أو ما إذا كانت هناك أي نوع من رسائل الخطأ) إذا لم أحصل على هذه المعلومات في غضون ذلك.

مرحبًا @Canapin

كنا مضطرين أيضًا لكتابة بعض أغلفة Ruby begin rescue end عند استيراد مرفقات vB3 الخاصة بنا إلى Discourse؛ لكن في النهاية، تم نقل جميع المرفقات تقريبًا وصور الرموز وصورة الملف الشخصي.

عندما بدأنا، لم يكن لدي أي خبرة مع Ruby و Rails؛ لكنني الآن معجب كبير بـ Ruby و Rails، وذلك بفضل Discourse؛ وأكتب قليلًا من كود Rails كل يوم الآن.

أعتقد أنه من الجيد تعلم القليل أثناء الترحيل، إذا كان لديك الاهتمام بذلك.