شكراً لتوفير هذا الدليل وسكربت الاستيراد! لقد استخدمته بنجاح مع مجموعة جوجل، باستخدام Google Takeout. لقد وضعت ملف .mbox في الدليل الصحيح وقمت بتشغيل السكربت.
كان لدي سؤال حول استيراد رسائل البريد الإلكتروني التي لها آباء غير موجودين في ملف .mbox. على سبيل المثال، هناك العديد من سلاسل الرسائل في مجموعتنا التي بدأت بإعادة توجيه بريد إلكتروني لم يتم إرساله إلى المجموعة، أو عن طريق إضافة المجموعة إلى قائمة الرد في منتصف محادثة لإشراكهم.
حاليًا، عند الاستيراد، يبدو أن رسائل البريد الإلكتروني السابقة هذه غير موجودة. يمكنك العثور عليها، إذا نقرت على أيقونة البريد الإلكتروني وعرضت HTML. كنت أتساءل عما إذا كان أي شخص آخر قد واجه نفس الموقف ولديه أي حلول له. يمكنني أن أتخيل إما تضمين سلسلة البريد الإلكتروني السابقة في المنشور أو محاولة تحليلها واستخراج عدد من الرسائل منها وإضافة كل هذه الرسائل.
هذا ممتاز حقًا. لكن لدي بعض المشاكل مع بعض رسائل البريد الإلكتروني التي تصل إلى Discourse مع بريد إلكتروني أولي ثم الردود بتنسيق mbox في نفس المنشور، وغير منسقة. لست متأكدًا مما يسبب هذا.
السؤال هو، كيف يمكنني حذف جميع رسائل البريد الإلكتروني المستوردة (20 عامًا) دون حذف مثيل Discourse المستهدف وإعادة إنشائه؟
أنا على علم بأن متطلبات ذاكرة الوصول العشوائي الموصى بها هي 8 جيجابايت. لقد حاولت استيراد 20 عامًا من المشاركات على جهاز افتراضي بسعة 2 جيجابايت، وعمل لفترة من الوقت وتعطل مع الرسالة ‘killed’. أجهزة 8 جيجابايت لدى مزودي الاستضافة مثل DigitalOcean باهظة الثمن (بالنسبة لي). هل هناك أي طريقة للقيام بذلك بذاكرة أقل؟ استيراد على دفعات أصغر ربما؟
ربما يمكنك حذف تلك الفئات ثم حذف حقول الموضوع المخصصة المرتبطة بها.
لا، لا أعتقد أنه يمكنك القيام بالكثير من الاستيراد على جهاز صغير. يمكنك المحاولة على سطح المكتب ولكن بعد ذلك ستواجه مشكلات في النطاق الترددي لإعادة قاعدة البيانات إلى الإنترنت.
أعلم أنه لا يوجد الكثير من النشاط في هذا الموضوع، لكنني لا أستطيع الحصول على تشغيله بشكل صحيح. يتم استيراد العديد من رسائل البريد الإلكتروني بتنسيق mbox بشكل غير صحيح. تبدو أسطر “From” كالتالي:
From MAILER-DAEMON Tue Nov 01 05:57:09 2022
ولكن بعض الرسائل يتم استيرادها بشكل صحيح ثم في نفس الجسم تحتوي على عناصر بتنسيق mbox خام تبدأ بسطر “From” النموذجي. بعبارة أخرى، لم يتم تقسيمها. لا أرى أنني بحاجة إلى تعديل التعبير العادي الذي يقوم بالتقسيم ولا أعرف لغة Ruby حتى لا أتمكن من تصحيح البرنامج النصي للاستيراد.
لا أعرف إلى أين أذهب من هنا. هناك 20 عامًا من الرسائل المراد استيرادها، لذلك لا يمكنني المرور عبر الرسائل المستوردة يدويًا لإصلاحها. باختصار، هذا البرنامج النصي لا يعمل بالنسبة لي. لماذا أكون الوحيد الذي يحدث له هذا؟
أنت لست كذلك. كانت وظيفتي الأولى مدفوعة الأجر في ديسكورس هي شهور في تنظيف ملفات mbox القديمة التي تم تحريرها يدويًا لسبب ما لا أتذكره.
يبدو أنك تحتاج إلى العبث بالتعبيرات النمطية أو إيجاد طريقة أخرى لإصلاح الرسائل الخاطئة. إحدى الطرق هي استخدام أداة أخرى لتقسيم الرسائل إلى ملف واحد لكل منها.
للعلم، لقد كتبت العديد من نصوص الاستيراد قبل أن أعرف لغة روبي.
كل استيراد فريد. مع 20 عامًا من البيانات، من المؤكد أنك ستواجه العديد من المشكلات المختلفة مع تغير الأشياء في الأنظمة المختلفة التي تم استخدامها.
أريد استيراد 20 عامًا من الرسائل من نظام mailman2 الخاص بي إلى دليل أرشيف، لكنني لا أريد إنشاء معرفات مستخدم (حتى المعرفات المؤقتة) لها، حيث انتقل العديد من المشتركين لدينا أو توفوا وسيؤدي ذلك إلى إنشاء العديد من الحسابات التي ستشغل مساحة فقط.
هل يمكنني استيرادها جميعًا تحت نفس معرف المستخدم (ربما ‘archive’)؟
وقد يكون هذا سؤالًا غبيًا، ولكن نظرًا لأن التطبيق مغلق أثناء عملية الاستيراد، فهل هذا يعني أن المستخدمين الذين اشتركوا في رسائل البريد الإلكتروني حول المنشورات الجديدة لن يغمروا برسائل البريد الإلكتروني حول جميع الأرشيفات التي تم تحميلها للتو؟
يمكنك التعليق على دالة import_users وستكون جميع الرسائل مملوكة للنظام.
لن توفر الكثير من المساحة.
لن يتلقى أي مستخدمين البريد الإلكتروني حتى يستخدموا عملية “نسيت كلمة المرور” لتسجيل الدخول إلى حساباتهم. إذا كنت تقوم باستيراد هذه البيانات إلى مجتمع قائم، فأعتقد أن المستخدمين سيتلقون إشعارات حول الرسائل الجديدة التي تم إنشاؤها بواسطة برنامج الاستيراد.
شكرًا لك، كنت أراجع البرنامج النصي للاستيراد واعتقدت أنه قد يكون بإمكاني تعطيل قسم المستخدمين الجدد. اختباره ضمن قائمتي.
لا يتعلق الأمر بمساحة الملفات، بل بوجود مئات الحسابات المستخدمة التي قد لا تُستخدم أبدًا، لذا فهي أقرب إلى مساحة الرأس أو قائمة مستخدمين طويلة جدًا.
لا أجد الملف import_mbox.sh وعندما أحاول تنفيذ البرنامج النصي mbox.rb مباشرة، أحصل على الكثير من أخطاء Ruby:
root@lists-import:/var/www/discourse/script/import_scripts# ruby mbox.rb mbox
fatal: detected dubious ownership in repository at ‘/var/www/discourse’
To add an exception for this directory, call:
لتكون أكثر تحديدًا، لقد قمت بتعديل الكود بنجاح والذي سمح بالاستيراد، مضيفًا .dup في السطر 447 من الملف /var/www/discourse/script/import_scripts/base.rb:
params[:name].dup.strip!
هناك شيء واحد غير واضح: كيف يمكنني الاستيراد إلى أحد المواقع المتعددة؟
هل حصل أي شخص على خطأ "لا يمكن تعديل سلسلة نصية مجمدة"؟ يتم إنشاء ملف index.db الخاص بي بشكل جيد ولكنه يفشل عند إنشاء الفئات.
root@xxxxxxxxxx:/var/www/discourse# import_mbox.sh
بدأ استيراد mbox...
جارٍ تحميل المجموعات الموجودة...
جارٍ تحميل المستخدمين الموجودين...
جارٍ تحميل الفئات الموجودة...
جارٍ تحميل المشاركات الموجودة...
جارٍ تحميل المواضيع الموجودة...
إنشاء الفهرس
جارٍ فهرسة الملفات في /shared/import/data/xxxxx-xxxxxxx@xxxxxxx.com
جارٍ فهرسة /shared/import/data/xxxxx-xxxxxxx@xxxxxxx.com/export.mbox
جارٍ فهرسة الردود والمستخدمين
إنشاء الفئات
/var/www/discourse/script/import_scripts/base.rb:447:in `strip!': **لا يمكن تعديل سلسلة نصية مجمدة: \"xxxxx-xxxxxxx@xxxxxxx.com\" (****FrozenError****)**
from /var/www/discourse/script/import_scripts/base.rb:447:in `block in create_categories'
from /var/www/discourse/script/import_scripts/base.rb:438:in `each'
from /var/www/discourse/script/import_scripts/base.rb:438:in `create_categories'
from /var/www/discourse/script/import_scripts/mbox/importer.rb:50:in `import_categories'
from /var/www/discourse/script/import_scripts/mbox/importer.rb:34:in `execute'
from /var/www/discourse/script/import_scripts/base.rb:47:in `perform'
from script/import_scripts/mbox.rb:13:in `<module:Mbox>'
from script/import_scripts/mbox.rb:11:in `<module:ImportScripts>'
from script/import_scripts/mbox.rb:10:in `<main>'