أود أن أبدأ بالاعتذار لأي شخص قد يشعر بالهجوم بسبب هذا المنشور، لأنه بصراحة، منذ يوم الاثنين وأنا أتعامل مع هذه المشاكل، وفي هذه المرحلة أنا متعب من تصحيح الأخطاء / الإصلاحات السريعة لكود Discourse.
بعد المحاولة الـ nth (توقفت عن العد بعد السابعة) أعتقد أنني سأستسلم لأنه يبدو أن الترحيل ليس شيئًا استثمر فيه Discourse الكثير من الوقت لدعمه.
أعتقد أن المشكلة الأكبر هي أن مجموعة الأحرف المستخدمة في قاعدة البيانات الضخمة هذه هي utf8mb4 والتي لا يدعمها البرنامج النصي (؟).
استخدام utf8 (الافتراضي) يولد الكثير من الأخطاء التي يتم الإبلاغ عنها ولكن ليس من الواضح ما يحدث حيث يستمر البرنامج النصي على أي حال. هل يتم تخطي الإدخال في قاعدة البيانات؟ هل يتم نسخه مع بعض الأحرف غير المدعومة (المربعات الكلاسيكية)؟
علاوة على ذلك، فإن آخر ثلاثة تشغيلات مختلفة (باستخدام مستوردي الدُفعات)، مع اتباع نفس مجموعة التعليمات بالضبط، لها نتائج مختلفة. وصل هذا التشغيل الأخير إلى استيراد الموضوع، وبدأ على الفور في الإبلاغ عن أخطاء ولكنه استمر (؟؟؟):
تحميل التطبيق...
بدء...
تحميل مسبق لـ I18n...
إصلاح أعلى أرقام المشاركات...
تحميل معرفات المجموعات المستوردة...
تحميل معرفات المستخدمين المستوردة...
تحميل معرفات الفئات المستوردة...
تحميل معرفات المواضيع المستوردة...
تحميل معرفات المشاركات المستوردة...
تحميل فهارس المجموعات...
تحميل فهارس المستخدمين...
تحميل فهارس الفئات...
تحميل فهارس المواضيع...
تحميل فهارس المشاركات...
تحميل فهارس إجراءات المشاركات...
استيراد الفئات...
استيراد الفئات الأصلية...
5 - 1104/ثانية
استيراد الفئات الفرعية...
500 - 1539/ثانيةخطأ: قيمة مفتاح مكررة تنتهك قيد التفرد "unique_index_categories_on_name"
التفاصيل: المفتاح (COALESCE(parent_category_id, '-1'::integer), name)=(-1, Armata Brancaleone) موجود بالفعل.
السياق: COPY categories, line 69
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/pg-1.4.5/lib/pg/connection.rb:204:in `get_last_result'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/pg-1.4.5/lib/pg/connection.rb:204:in `copy_data'
/var/www/discourse/script/bulk_import/base.rb:720:in `create_records'
/var/www/discourse/script/bulk_import/base.rb:361:in `create_categories'
script/bulk_import/vbulletin5.rb:291:in `import_categories'
script/bulk_import/vbulletin5.rb:69:in `execute'
/var/www/discourse/script/bulk_import/base.rb:98:in `run'
script/bulk_import/vbulletin5.rb:779:in `<main>'
استيراد المواضيع...
600 - 4073/ثانية
خطأ: طريقة غير معرفة `[]' لـ nil:NilClass
/var/www/discourse/script/bulk_import/base.rb:513:in `process_topic'
/var/www/discourse/script/bulk_import/base.rb:724:in `block (2 levels) in create_records'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-3.0.0/lib/patches/db/mysql2/alias_method.rb:8:in `each'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-3.0.0/lib/patches/db/mysql2/alias_method.rb:8:in `each'
/var/www/discourse/script/bulk_import/base.rb:721:in `block in create_records'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/pg-1.4.5/lib/pg/connection.rb:196:in `copy_data'
/var/www/discourse/script/bulk_import/base.rb:720:in `create_records'
/var/www/discourse/script/bulk_import/base.rb:364:in `create_topics'
script/bulk_import/vbulletin5.rb:321:in `import_topics'
script/bulk_import/vbulletin5.rb:70:in `execute'
/var/www/discourse/script/bulk_import/base.rb:98:in `run'
script/bulk_import/vbulletin5.rb:779:in `<main>'
حتى يتعطل أخيرًا بسبب هذا:
script/bulk_import/vbulletin5.rb:779:in `<main>'
572329 - 531/ثانية
استيراد الردود...
client_loop: send disconnect: Connection reset
ولكن ليس قبل أن يقوم بشكل أساسي بإزعاج هذين الخطأين باستمرار:
خطأ: طريقة غير معرفة `gsub!' لـ nil:NilClass
script/bulk_import/vbulletin5.rb:727:in `preprocess_raw'
script/bulk_import/vbulletin5.rb:369:in `block in import_topic_first_posts'
/var/www/discourse/script/bulk_import/base.rb:723:in `block (2 levels) in create_records'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-3.0.0/lib/patches/db/mysql2/alias_method.rb:8:in `each'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-3.0.0/lib/patches/db/mysql2/alias_method.rb:8:in `each'
/var/www/discourse/script/bulk_import/base.rb:721:in `block in create_records'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/pg-1.4.5/lib/pg/connection.rb:196:in `copy_data'
/var/www/discourse/script/bulk_import/base.rb:720:in `create_records'
/var/www/discourse/script/bulk_import/base.rb:367:in `create_posts'
script/bulk_import/vbulletin5.rb:361:in `import_topic_first_posts'
script/bulk_import/vbulletin5.rb:71:in `execute'
/var/www/discourse/script/bulk_import/base.rb:98:in `run'
script/bulk_import/vbulletin5.rb:779:in `<main>'
و
خطأ: تسلسل بايت غير صالح في UTF-8
script/bulk_import/vbulletin5.rb:727:in `gsub!'
script/bulk_import/vbulletin5.rb:727:in `preprocess_raw'
script/bulk_import/vbulletin5.rb:369:in `block in import_topic_first_posts'
/var/www/discourse/script/bulk_import/base.rb:723:in `block (2 levels) in create_records'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-3.0.0/lib/patches/db/mysql2/alias_method.rb:8:in `each'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-3.0.0/lib/patches/db/mysql2/alias_method.rb:8:in `each'
/var/www/discourse/script/bulk_import/base.rb:721:in `block in create_records'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/pg-1.4.5/lib/pg/connection.rb:196:in `copy_data'
/var/www/discourse/script/bulk_import/base.rb:720:in `create_records'
/var/www/discourse/script/bulk_import/base.rb:367:in `create_posts'
script/bulk_import/vbulletin5.rb:361:in `import_topic_first_posts'
script/bulk_import/vbulletin5.rb:71:in `execute'
/var/www/discourse/script/bulk_import/base.rb:98:in `run'
script/bulk_import/vbulletin5.rb:779:in `<main>'
يرجى ملاحظة أنني ذهبت خطوة بخطوة عن طريق التعليق على الوظيفة التي يجب تشغيلها، ثم تشغيل rake import:ensure_consistency قبل المتابعة عن طريق التعليق على الوظائف التي تم تشغيلها بالفعل وما إلى ذلك، لأنه إذا تركت البرنامج النصي بأكمله يعيد تشغيل الخطوات التي تم تشغيلها سابقًا، فإنه يتعطل ببساطة عن طريق العثور على معرفات مكررة.
قبل أن تأتي حجة “لا يمكنك الشكوى من البرامج المجانية” المعتادة، أريد أن أوضح أنني أساهم في مشاريع أخرى مفتوحة المصدر وأصنع برامج مجانًا أيضًا، ولكن من الضروري بالنسبة لي أنه إذا أصدرت شيئًا ما، فإن هذا الشيء يعمل ويوثق جيدًا (حتى لو فقط لتجنب الآلاف من الرسائل التي تسأل بشكل مبرر “كيف يعمل هذا”) أو أكون مستعدًا لإصلاح أي خطأ يظهر.
بينما يبدو أن Discourse يقدم تجربة رائعة جاهزة للاستخدام، يجب أن يكون واضحًا تمامًا أنه عام 2022 وأن المجتمعات كانت موجودة قبل هذا المنتج بوقت طويل. “التبني” سيحتاج إلى دعم ترحيل قوي ولا يبدو أن هذه هي الحالة الحالية لـ Discourse.
أدرك أن قاعدة بيانات بحجم 20 جيجابايت هي حالة استثنائية، لكننا لا نواجه مشكلة في الحجم هنا، بل في مجموعة الأحرف أو من يعرف ماذا، حيث لا يوجد حتى خطأ ثابت ومعظمها: لا توجد وثائق بخلاف البحث عن سلاسل الرسائل والمشاركات التي تركها من مروا بنفس المحنة في الماضي، على أمل العثور على حل بديل وأن الكود المصدري لم يتغير كثيرًا منذ ذلك الحين.
في هذه المرحلة، أوصي بشدة أي شخص قادم من vbulletin بتعليق أي ترحيل حتى يكتمل ما يبدو أنه إعادة هيكلة لبرنامج الترحيل (قيد الإنجاز على ما يبدو؟).