نقل قائمة بريدية إلى Discourse (mbox، Listserv، Google Groups، إلخ)

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

كان لدي سؤال حول استيراد رسائل البريد الإلكتروني التي لها آباء غير موجودين في ملف .mbox. على سبيل المثال، هناك العديد من سلاسل الرسائل في مجموعتنا التي بدأت بإعادة توجيه بريد إلكتروني لم يتم إرساله إلى المجموعة، أو عن طريق إضافة المجموعة إلى قائمة الرد في منتصف محادثة لإشراكهم.

حاليًا، عند الاستيراد، يبدو أن رسائل البريد الإلكتروني السابقة هذه غير موجودة. يمكنك العثور عليها، إذا نقرت على أيقونة البريد الإلكتروني وعرضت HTML. كنت أتساءل عما إذا كان أي شخص آخر قد واجه نفس الموقف ولديه أي حلول له. يمكنني أن أتخيل إما تضمين سلسلة البريد الإلكتروني السابقة في المنشور أو محاولة تحليلها واستخراج عدد من الرسائل منها وإضافة كل هذه الرسائل.

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

ستحتاج إلى إيجاد طريقة لإنشاء تلك الرسائل من النص المقتبس وإضافتها إلى ملف mbox (ربما مع رؤوس Id) قبل تشغيل البرنامج النصي للاستيراد.

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

هذا ممتاز حقًا. لكن لدي بعض المشاكل مع بعض رسائل البريد الإلكتروني التي تصل إلى Discourse مع بريد إلكتروني أولي ثم الردود بتنسيق mbox في نفس المنشور، وغير منسقة. لست متأكدًا مما يسبب هذا.

السؤال هو، كيف يمكنني حذف جميع رسائل البريد الإلكتروني المستوردة (20 عامًا) دون حذف مثيل Discourse المستهدف وإعادة إنشائه؟

أنا على علم بأن متطلبات ذاكرة الوصول العشوائي الموصى بها هي 8 جيجابايت. لقد حاولت استيراد 20 عامًا من المشاركات على جهاز افتراضي بسعة 2 جيجابايت، وعمل لفترة من الوقت وتعطل مع الرسالة ‘killed’. أجهزة 8 جيجابايت لدى مزودي الاستضافة مثل DigitalOcean باهظة الثمن (بالنسبة لي). هل هناك أي طريقة للقيام بذلك بذاكرة أقل؟ استيراد على دفعات أصغر ربما؟

ربما يمكنك حذف تلك الفئات ثم حذف حقول الموضوع المخصصة المرتبطة بها.

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

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

أعلم أنه لا يوجد الكثير من النشاط في هذا الموضوع، لكنني لا أستطيع الحصول على تشغيله بشكل صحيح. يتم استيراد العديد من رسائل البريد الإلكتروني بتنسيق mbox بشكل غير صحيح. تبدو أسطر “From” كالتالي:

From MAILER-DAEMON Tue Nov 01 05:57:09 2022

ولكن بعض الرسائل يتم استيرادها بشكل صحيح ثم في نفس الجسم تحتوي على عناصر بتنسيق mbox خام تبدأ بسطر “From” النموذجي. بعبارة أخرى، لم يتم تقسيمها. لا أرى أنني بحاجة إلى تعديل التعبير العادي الذي يقوم بالتقسيم ولا أعرف لغة Ruby حتى لا أتمكن من تصحيح البرنامج النصي للاستيراد.

لا أعرف إلى أين أذهب من هنا. هناك 20 عامًا من الرسائل المراد استيرادها، لذلك لا يمكنني المرور عبر الرسائل المستوردة يدويًا لإصلاحها. باختصار، هذا البرنامج النصي لا يعمل بالنسبة لي. لماذا أكون الوحيد الذي يحدث له هذا؟

أنت لست كذلك. كانت وظيفتي الأولى مدفوعة الأجر في ديسكورس هي شهور في تنظيف ملفات mbox القديمة التي تم تحريرها يدويًا لسبب ما لا أتذكره.

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

للعلم، لقد كتبت العديد من نصوص الاستيراد قبل أن أعرف لغة روبي.

كل استيراد فريد. مع 20 عامًا من البيانات، من المؤكد أنك ستواجه العديد من المشكلات المختلفة مع تغير الأشياء في الأنظمة المختلفة التي تم استخدامها.

إعجابَين (2)

أنت تراهن. هذا بالتأكيد.

أريد استيراد 20 عامًا من الرسائل من نظام mailman2 الخاص بي إلى دليل أرشيف، لكنني لا أريد إنشاء معرفات مستخدم (حتى المعرفات المؤقتة) لها، حيث انتقل العديد من المشتركين لدينا أو توفوا وسيؤدي ذلك إلى إنشاء العديد من الحسابات التي ستشغل مساحة فقط.

هل يمكنني استيرادها جميعًا تحت نفس معرف المستخدم (ربما ‘archive’)؟

وقد يكون هذا سؤالًا غبيًا، ولكن نظرًا لأن التطبيق مغلق أثناء عملية الاستيراد، فهل هذا يعني أن المستخدمين الذين اشتركوا في رسائل البريد الإلكتروني حول المنشورات الجديدة لن يغمروا برسائل البريد الإلكتروني حول جميع الأرشيفات التي تم تحميلها للتو؟

يمكنك التعليق على دالة import_users وستكون جميع الرسائل مملوكة للنظام.

لن توفر الكثير من المساحة.

لن يتلقى أي مستخدمين البريد الإلكتروني حتى يستخدموا عملية “نسيت كلمة المرور” لتسجيل الدخول إلى حساباتهم. إذا كنت تقوم باستيراد هذه البيانات إلى مجتمع قائم، فأعتقد أن المستخدمين سيتلقون إشعارات حول الرسائل الجديدة التي تم إنشاؤها بواسطة برنامج الاستيراد.

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

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

أنت تعرف المستخدمين لديك، ولكن وجود حسابات لن يستخدمها أحد يبدو أفضل بكثير من عدم معرفة من نشر الرسائل لمدة 20 عامًا.

3 إعجابات

هذه نقطة صحيحة يا جاي.

لا أجد الملف 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:

    git config --global --add safe.directory /var/www/discourse

/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/zeitwerk-2.6.7/lib/zeitwerk/loader/callbacks.rb:25:in `on_file_autoloaded’: expected file /var/www/discourse/lib/freedom_patches/pluck_first.rb to define constant FreedomPatches::PluckFirst, but didn’t (Zeitwerk::NameError)

  raise Zeitwerk::NameError.new(msg, cref.last)

تحياتي أيها الزملاء. يا له من دليل رائع. شكراً لغيرهارد وآخرين على مساهماتهم.

هل قام أي شخص هنا بتكييف هذا لـ Lyris؟ أنا مهتم بترحيل تثبيت تاريخي وأود أن أفهم ما إذا كانت هناك أي مخاوف خاصة واجهوها في مشروع مماثل.

كنت بحاجة إلى استيراد مشاركات من قائمة بريدية إلى Discourse، وواجهت مشكلتين.

  • لم يتم العثور على sqlite3.
  • لم أتمكن من العثور على import_mbox.sh.

هذه هي حلولي:

تثبيت sqlite3

أضفت إلى Gemfile:

 gem "sqlite3", "~> 1.3", ">= 1.3.13"

ثم قمت بتشغيل:

cd discourse
bundle config set frozen false
bundler install

تشغيل الاستيراد

cd discourse
RAILS_ENV=production bundle exec rails runner script/import_scripts/mbox.rb script/import_scripts/mbox/settings.yml
إعجاب واحد (1)

ربما فاتتك الخطوة التالية المخفية خلف “الاستيراد المنتظم” في 1.2. إعداد حاوية Docker.

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

أواجه خطأ can't modify frozen String. هل يمكن لأحد أن يقترح حلاً أو يوضح ما الذي أفعله بشكل خاطئ؟

root@sajcf:~# /var/discourse/launcher stop app
x86_64 arch detected.
+ /usr/bin/docker stop -t 600 app
app
root@sajcf:~# /var/discourse/launcher enter import
x86_64 arch detected.
root@sajcf-import:/var/www/discourse# import_mbox.sh
The mbox import is starting...

Loading existing groups...
Loading existing users...
Loading existing categories...
Loading existing posts...
Loading existing topics...

creating index
indexing files in /shared/import/data/jjcf
indexing /shared/import/data/jjcf/SAJCF.mbox

indexing replies and users

creating categories
/var/www/discourse/script/import_scripts/base.rb:447:in `strip!': can't modify frozen String: "jjcf" (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>'

يمكنك البحث في جوجل عن كيفية حل ذلك. أعتقد أن .dup قد تكون طريقة سهلة.

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

لتكون أكثر تحديدًا، لقد قمت بتعديل الكود بنجاح والذي سمح بالاستيراد، مضيفًا .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>'