تقدم هذه الدليل تعليمات حول كيفية إعادة طهي جميع المنشورات في Discourse التي تطابق نصًا محددًا أو تعبيرًا نمطيًا (Regular Expression)، مع استخدام وحدة تحكم Rails لخيارات متقدمة إضافية.
مستوى المستخدم المطلوب: المشرف
مطلوب الوصول إلى وحدة التحكم
هل ترغب في إعادة طهي جميع المنشورات التي تطابق نصًا أو تعبيرًا نمطيًا؟ لنبدأ!
الوصول إلى موقعك
للبدء، اتصل بمشغل 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:"]
إعادة طهي جميع المنشورات التي تطابق تعبيرًا نمطيًا
يستخدم 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