تتم استعادة المشاركات المحذوفة برفق كمشاركات عادية (وتكون مرئية). هذه مشكلة واضحة لأنني أعتقد أن المستخدمين يحذفون برفق افتراضيًا، ويمكن أن تحتوي المشاركات المحذوفة على معلومات حساسة.
تشمل الأعمدة ذات الصلة: post_delete_user, post_delete_time, post_visibility, post_delete_reason
يبدو أن post_visibility هو الوحيد ذو الصلة - لا يتم مسح قيم الأعمدة الأخرى إذا تم حذف مشاركة برفق ثم استعادتها. عادي = 1، غير مرئي = 2
إصلاحي هو تجاهل المشاركات المحذوفة برفق فقط لأن لا أحد يهتم.
قم بتشغيل هذا على قاعدة بيانات المصدر الخاصة بك قبل الترحيل:
DELETE FROM phpbb_posts WHERE post_visibility = 2;
لديّ خط أنابيب “ترحيل مستمر” متواضع. إنها عبارة عن مجموعة من نصوص shell النصية لأداء مهام مثل:
سحب قاعدة بيانات phpbb والمرفقات وما إلى ذلك من الخادم البعيد
إنشاء/إدارة مثيلات Discourse
يتم تطبيق site_settings محددة عند إنشاء مثيل Discourse من مثيل قالب
عمل نسخ احتياطية/استعادتها
تشغيل الترحيل باستخدام مجموعة محددة من نصوص الاستيراد من مستودع git
القيام بمهام ما بعد الترحيل
بشكل أساسي، يتيح لي هذا العمل على مثيل Discourse dctemplate قبل الترحيل الذي ألعب به. أواصل تعديل إعدادات Discourse حسب رغبتي.
ليلاً، أسحب من phpbb المباشر الحالي وأقوم بترحيل جديد على مثيل Discourse جديد (dcstaging) تم إنشاؤه للتو من أحدث قالب.
يستغرق القيام بذلك ساعات، بالطبع، لذلك لديّ أيضًا phpbb محلي قيد التشغيل مع قاعدة بيانات صغيرة جدًا أستخدمها لإجراء الاختبارات وتحسين نصوص الترحيل. يمكنني إجراء عمليات ترحيل سريعة نسبيًا للاختبار على مثيل Discourse آخر (dcdev).
لذلك، سير عمل الاختبار النهاري يبدو كالتالي:
قمت ببعض العمل على القالب، وأنا راضٍ عن الوضع الحالي:
./dc_template_create.sh dctemplate
أوه، لقد ارتكبت خطأ في القالب الخاص بي. استعادته إلى الحالة السابقة:
./dc_template_restore.sh dctemplate
قم بإجراء ترحيل سريع لاختبار بعض الأشياء:
# إنشاء مثيل جديد dcdev من dctemplate (وتطبيق site_settings محددة على dcdev)
./dc_template_restore.sh dcdev dctemplate
./dc_migrate.sh dcdev # يعمل مع مستودع نص الترحيل الخاص بهذا المثيل
قم بإجراء ترحيل طويل بين عشية وضحاها من phpbb المباشر الحقيقي:
./dc_template_create.sh dctemplate
./dc_template_restore.sh dcstaging dctemplate
./phpbb_pull.sh
./dc_migrate.sh dcstaging
sleep 300
./dc_rake.sh dcstaging # مهام إضافية ما بعد الترحيل لا يتعامل معها المستورد لـ (إنشاء مشرفين، وضع علامات مفصلة، نقل بعض المواضيع، إلخ)
إذا كان أي شخص مهتمًا بما فيه الكفاية، يمكنني تنظيفه قليلاً ومشاركته.
يحتوي discourse على علامات، لذلك قد يكون من الحكمة الاستفادة منها والتخلص من الفئات الفرعية حيثما كان ذلك منطقيًا.
كانت كل فئة فرعية من فئاتي تحتوي على عدة مواضيع مثبتة/ملصقة، وعند دمجها في فئة كبيرة، يصبح ذلك عددًا كبيرًا جدًا من المواضيع المثبتة. إنه أمر مزعج.
كان حلي هو الانتقال من فئات مثل:
طعام
- أمريكي
- صيني
- ...
إلى هذا:
طعام
- مميز
تصبح “أمريكي” و “صيني” وما إلى ذلك علامات، وتنتقل جميع المواضيع المثبتة إلى “مميز” ويتم إلغاء تثبيتها.
# إلغاء تثبيت جميع المواضيع المثبتة في فئة ونقلها إلى فئة فرعية
def move_pinned_topics_to_subcategory(category, subcategory_name)
subcategory = Category.where(name: subcategory_name).find_by(parent_category_id: category.id)
topics = Topic.where(category_id: category.id).where.not(pinned_at: nil)
topics.each do |topic|
topic.update(pinned_at: nil, pinned_globally: false, pinned_until: nil,
category_id: subcategory.id) if not topic.title[/About the .+ category/]
end
Category.update_stats
end
food_cat = Category.find_by(name: 'Food')
move_pinned_topics_to_subcategory(food_cat, 'Featured')
منتداي لديه أيضًا تجسيد سابق، غير نشط (أيضًا phpBB) لدينا نسخة منه باستخدام wget، لذا أعمل على مستورد لذلك. تحليل ملفات HTML باستخدام nokogiri، استيعابها في قاعدة بيانات وسيطة، ثم العمل مع فئة المستورد الأساسية لإدخال الصفوف في Discourse.
رأيت هذا:
أفترض أن هذه مشكلة غير شائعة، ولكن إذا كان أي شخص آخر يواجه هذه المشكلة، فربما سأضيف القليل من اللمسات الإضافية وأشاركها. أخبرني.
أو إذا كان شخص ما قد قام بذلك بالفعل ويريد مشاركته معي، فهذا أفضل. لم أتقدم كثيرًا في المشروع بعد.