إعادة نشر جميع المنشورات المطابقة لنمط معين

:bookmark: تقدم هذه الدليل تعليمات حول كيفية إعادة طهي جميع المنشورات في Discourse التي تطابق نصًا محددًا أو تعبيرًا نمطيًا (Regular Expression)، مع استخدام وحدة تحكم Rails لخيارات متقدمة إضافية.

:person_raising_hand: مستوى المستخدم المطلوب: المشرف

:warning: مطلوب الوصول إلى وحدة التحكم

هل ترغب في إعادة طهي جميع المنشورات التي تطابق نصًا أو تعبيرًا نمطيًا؟ لنبدأ!

الوصول إلى موقعك

للبدء، اتصل بمشغل Discourse (Droplet) الخاص بك عبر SSH، ثم أدخل حاوية Docker الخاصة بـ Discourse:

cd /var/discourse
./launcher enter app

إعادة طهي جميع المنشورات التي تحتوي على نص محدد

استخدم الأمر التالي، مع استبدال pattern بالنص الذي تريد مطابقته. هذا البحث غير حساس لحالة الأحرف.

rake posts:rebake_match["pattern"]

على سبيل المثال، لإعادة طهي جميع المنشورات التي تحتوي على :slight_smile: في محتواها الخام:

rake posts:rebake_match[":slight_smile:"]

إعادة طهي جميع المنشورات التي تطابق تعبيرًا نمطيًا

:information_source: يستخدم PostgreSQL التعبيرات النمطية POSIX لإجراء المطابقة. تكون المطابقة غير حساسة لحالة الأحرف. يتم تطبيق علم حساس لسطور جديدة ((?n)) تلقائيًا، مما يعني أن . لن يطابق أحرف السطر الجديد، وأن ^/$ ستطابق عند حدود الأسطر.

بالنسبة للتعبيرات النمطية، استخدم هذا الأمر.

rake posts:rebake_match["pattern",regex]

أمثلة:

  • إعادة طهي المنشورات التي تحتوي على :slight_smile: أو Discourse:

    rake posts:rebake_match[":slight_smile:|Discourse",regex]
    
  • إعادة طهي المنشورات التي تبدأ بـ Today:

    rake posts:rebake_match["^Today",regex]
    
  • إعادة طهي المنشورات التي تبدأ بـ Today أو Yesterday:

    rake posts:rebake_match["^(Today|Yesterday)",regex]
    

تأخير اختياري بين عمليات إعادة الطهي

لإضافة تأخير مدته 5 ثوانٍ بين كل تنفيذ لإعادة الطهي، عدّل الأمر على النحو التالي. قم بتعديل الرقم 5 إلى أي عدد من الثواني تحتاجه:

rake posts:rebake_match["pattern",string,5]

متقدم: استخدام وحدة تحكم Rails

بالنسبة للمهام التي لا تكفي فيها مهمة Rake، استخدم وحدة تحكم Rails.

الوصول إلى وحدة تحكم Rails

من داخل حاوية Docker، ابدأ وحدة تحكم Rails:

rails c

استخدام مهمة Rake لإرجاع المنشورات غير المطهية

قم بتعيين المنشورات المستهدفة إلى حالة ‘uncooked’ لإعادة الطهي. اخرج من وحدة تحكم Rails بعد تشغيل الإعداد، ثم نفذ أمر إعادة الطهي:

لإعادة طهي فئة كاملة:

rails c
Post.joins(:topic).where('topics.category_id = 136').update_all('baked_version = NULL')
exit
rake posts:rebake_uncooked_posts

تنفيذ حلقة في وحدة تحكم Rails

لإجراء عمليات دقيقة، اختر المنشورات كمصفوفة وقم بإعادة طهي كل منشور مباشرة.

منشورات من مستخدم معين

user = User.find_by_username('user123')
posts = Post.where(user_id: user.id)
posts.each do |p|
  p.rebake!
end

منشورات تحتوي على نص محدد

posts = Post.where("cooked like '%OldCDN%'")
posts.each do |p|
  p.rebake!
end
40 إعجابًا

هل هناك طريقة سهلة لإلغاء طهي جميع المشاركات/المواضيع التي تم إنشاؤها قبل تاريخ معين؟