لكتابة نص برمجي لإعادة ترتيب Discourse كبير بالتعاون مع قيادة موقعي، قمت بكتابة إطار عمل بسيط لتجميع مجموعة من النصوص البرمجية الصغيرة بلغة Ruby ليتم تشغيلها من ملف تكوين YAML. بهذه الطريقة، يمكنني استعادة نسخة احتياطية على موقع تجريبي، وتشغيل النص البرمجي الخاص بي، والحصول على ملاحظات، وتغيير بضعة أسطر من YAML، واستعادة النسخة الاحتياطية، وتشغيل النص البرمجي بتكوين جديد، والتكرار حتى الرضا.
لدي ما يقرب من 600 سطر من التكوين لموقعي، والقيام بذلك عن طريق التلاعب اليدوي من خلال واجهة المستخدم لن يحدث. لن يحدث ذلك مرة واحدة، ناهيك عن مرات عديدة للحصول عليه بشكل صحيح. أعرف هذا لأن المرة الأخيرة التي اقترحت فيها إجراء تغييرات واسعة النطاق، استسلمت حرفيًا في محاولة القيام بذلك. على النقيض من ذلك، مع هذا النص البرمجي، يمكنني الآن إكمال الدورة بأكملها في دقائق قليلة لكل تكرار، على الرغم من أن الموقع يحتوي على حوالي نصف مليون مشاركة وأكثر من 100 فئة. هذا يسمح لي بالحصول على ملاحظات سريعة من قيادة موقعي، وسأكون مستعدًا لترحيل موقعي بسرعة.
مزيد من الوثائق التفصيلية موجودة في ملف README في المستودع مع الكود:
هذا النص البرمجي لا يقوم بأي فحص للأخطاء. من الجنون تقريبًا تشغيله على موقعك المباشر. إنه مخصص للتشغيل على موقع تجريبي، والتحقق من النتيجة، ثم نقله إلى الموقع المباشر. بصفتي المؤلف، ما زلت أنوي تشغيله بهذه الطريقة. إذا قمت بتشغيله مباشرة على موقع مباشر، فستحتفظ بجميع القطع عندما يتعطل. ![]()
من الوثائق، قد يبدو ملف التكوين كالتالي:
---
- describe:
context: Old Name
category: 7
name: New Name
description: New description of category
slug: new-slug
- movePosts:
context: move only faq posts from the Support category to the Documentation category
source: 3 # Support category ID
target: 6 # Documentation category ID
withTag: faq
hide: false # do not hide the Support category when done
- movePosts:
context: consolidate How-To category into documentation with how-to tag
source: 8 # How-To category ID
target: 6 # Documentation category ID
addTag: how-to
hide: true # hide the old How-To category, visible only to Admin
قد يبدو ناتج التقدم أثناء تشغيله كالتالي.
==========
Move hidden categories out of the way so they don't clutter admin view
setHiddenCategory: {:category=>11}
==========
Rename Old Name to New Name
describe: {:category=>7, :name=>"New Name", :description=>"New description of category", :slug=>"new-slug"}
==========
move only faq posts from the Support category to the Documentation category
movePosts: {:source=>3, :withTag=>"faq", :target=>6}
==========
للاستخدام، ضع ملف YAML الخاص بك في /var/discourse/shared/app/tmp/rearrange.yaml ثم:
cd /var/discourse
./launcher enter app
git clone https://github.com/johnsonm/discourse-site-rearranger.git script/discourse-site-rearranger
ruby script/discourse-site-rearranger/rearrange.rb /shared/tmp/rearrange.yaml
ومع ذلك، من المحتمل بشكل معقول أن هذا النص البرمجي لن يفعل كل ما تحتاجه تمامًا. إنه حقًا إطار عمل يجعل من السهل جدًا إضافة إجراءات جديدة تعمل على أتمتة المزيد من جوانب تعديل الموقع المبرمج ببضعة أسطر من الكود. كل ما عليك فعله هو تعريف طريقة واحدة ببضعة أسطر من الكود، وستتمكن من استدعائها بشكل صحيح من ملف YAML.
هل كنت تفكر في تحسين تنظيم موقعك، ولكنك تراجعت عن استخدام واجهة المستخدم، أو تتساءل كيف تثق في أنك ستتمكن من تكرار اختباراتك على موقع تجريبي لإجراء تغييرات مباشرة؟ ألق نظرة وأخبرني برأيك!