تعبئة ملحق Discourse كجوهرة

بدأت Pavilion في حزم بعض إضافات Discourse كـ ruby gems، بدءًا من عميل الاشتراك الخاص بنا.

لا يزال عميل الاشتراك الخاص بنا إضافة منفصلة تقوم الآن بتحميل هذا الـ gem، ولكنه الآن معبأ بالكامل في الخلفية كـ gem وسيتم إهمال الإضافة المنفصلة قريبًا تمامًا. هذا تمهيد بسيط لكيفية القيام بنفس الشيء مع إضافاتك التي تناسب أن تكون gems.

كيفية العمل مع gems

أولاً، تحتاج إلى فهم كيفية العمل مع ruby gems. إذا لم تقم بإنشاء gem من قبل، فإنني أوصي بإنشاء gem قياسي خاص بك بشكل منفصل قبل أن تتصدى للعمل مع إضافة Discourse كـ gem. أوصي بهذا الدليل

كيفية قيام الإضافات بحقن التعليمات البرمجية في Discourse

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

  1. إضافة Discourse هي محرك rails. ربما تكون على دراية بهذا بالفعل، ولكن ستحتاج إلى فهم ما يعنيه ذلك حقًا. أوصي بالاطلاع على هذا الدليل حول محركات Rails. على سبيل المثال، ستحتاج إلى فهم سبب تغليف الكثير من التعليمات البرمجية في ملف plugin.rb الخاص بإضافة Discourse في رد اتصال after_initialize.

  2. كيفية عمل عملية تهيئة Discourse. هناك ملف واحد فقط للقراءة والفهم هنا، وهو ملف discourse/discourse/config/application.rb. هذا هو المكان الذي يتم فيه تحميل معظم تعليمات Rails البرمجية، حيث يتم تحميل جميع تعليمات الإضافات البرمجية، وحيث يتم تهيئة الإضافات. قم بالاطلاع على هذا الملف بعمق وفهم أين وكيف يتم طلب ملفات الإضافات ثم تهيئتها.

كيفية عمل إضافة Discourse كـ gem

لجمع كل ذلك معًا، ستحتاج بعد ذلك إلى فهم كيفية دمج الموضوعين المذكورين أعلاه في إضافة Discourse كـ gem. لاحظ بشكل خاص ما يلي:

  1. في إضافة Discourse كـ gem، يلعب ملف engine.rb دورًا مشابهًا لملف plugin.rb، مع بعض الاختلافات في التكوين. تحقق من ملف subscription client gem engine.rb وقارنه بملف plugin.rb قياسي.

  2. في إضافة Discourse كـ gem، تحتاج إلى محاكاة discourse/discourse في اختبارات rspec الخاصة بك لاختبار الـ gem بشكل صحيح. لا تحتاج إلى محاكاة تطبيق Discourse بأكمله، فقط الأجزاء التي تختبرها. تفعل ذلك عن طريق إنشاء تطبيق rails هيكلي بفئات ونقاط نهاية Discourse المحددة التي تحتاجها وتحميله كدعم rspec. انظر إلى تطبيق Discourse الوهمي الخاص بـ subscription client gem، وإلى مكان تحميله في spec rails_helper.rb.

كيفية تحميل gem محلي في إضافة Discourse

لتحميل نسختك المحلية من gem في إضافة Discourse عند العمل مع تلك الإضافة والـ gem في بيئة التطوير، تحتاج إلى القيام بما يلي.

قم بإنشاء رابط رمزي لمجلد الـ gem الخاص بك إلى مجلد الـ gem الخاص بالإضافة ذات الصلة. على سبيل المثال، للعمل مع نسختي المحلية من gem discourse_subscription_client في إضافة discourse-subscription-client، أقوم بما يلي

ln -s /Users/angus/discourse/gems/discourse_subscription_client /Users/angus/discourse/discourse/plugins/discourse-subscription-client/gems/3.2.1/gems

ثم قم بتغيير اسم مجلد الـ gem المرتبط رمزيًا في الإضافة لاستخدام نفس نمط الاسم مثل مجلد gem قياسي، على سبيل المثال

discourse_subscription_client-0.1.0.pre11

الآن عندما تقوم إضافتك بتحميل إضافة Discourse الخاصة بك كـ gem، فستقوم بتحميل نسختك المحلية بدلاً من تلك الموجودة على rubygems.

إذا كانت لديك أي أسئلة أو واجهت صعوبة، فانشر هنا وسأساعدك.

14 إعجابًا

يبدو أن هذا النهج غير ممكن لتغطية أي شيء متعلق بموضوعات Discourse في المكون الإضافي؟ ربما يكون العنوان الأفضل هو “تغليف محرك Rails خاص بـ Discourse كجوهرة”

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

هذا صحيح، تحتاج إلى التعامل مع الأشياء الخاصة بإطار عمل الواجهة الأمامية جافاسكريبت بشكل منفصل.

بينما هذا دقيق تقنيًا، لا أتفق على أن هذا العنوان سيكون أفضل لأنه سيثني بعض الأشخاص المناسبين عن قراءة الموضوع: معظم الأشخاص الذين يكتبون الإضافات قد لا يعرفون أنها “محركات ريلز خاصة بدسكورس”.

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

3 إعجابات

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

وشكراً لمشاركتك هذا.

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

أتفق على أنه موضوع متقدم.