بدأت Pavilion في حزم بعض إضافات Discourse كـ ruby gems، بدءًا من عميل الاشتراك الخاص بنا.
لا يزال عميل الاشتراك الخاص بنا إضافة منفصلة تقوم الآن بتحميل هذا الـ gem، ولكنه الآن معبأ بالكامل في الخلفية كـ gem وسيتم إهمال الإضافة المنفصلة قريبًا تمامًا. هذا تمهيد بسيط لكيفية القيام بنفس الشيء مع إضافاتك التي تناسب أن تكون gems.
كيفية العمل مع gems
أولاً، تحتاج إلى فهم كيفية العمل مع ruby gems. إذا لم تقم بإنشاء gem من قبل، فإنني أوصي بإنشاء gem قياسي خاص بك بشكل منفصل قبل أن تتصدى للعمل مع إضافة Discourse كـ gem. أوصي بهذا الدليل
كيفية قيام الإضافات بحقن التعليمات البرمجية في Discourse
الطريقة التي يقوم بها Discourse plugin gem بحقن التعليمات البرمجية في Discourse هي بالضبط نفس الطريقة التي تقوم بها الإضافة القياسية. الاختلاف الوحيد هو التعبئة. لذلك للعمل مع إضافة كـ gem، ستحتاج أيضًا إلى فهم كيفية قيام الإضافة القياسية بحقن التعليمات البرمجية في Discourse. هناك شيئان أساسيان يجب فهمهما هنا
-
إضافة Discourse هي محرك rails. ربما تكون على دراية بهذا بالفعل، ولكن ستحتاج إلى فهم ما يعنيه ذلك حقًا. أوصي بالاطلاع على هذا الدليل حول محركات Rails. على سبيل المثال، ستحتاج إلى فهم سبب تغليف الكثير من التعليمات البرمجية في ملف
plugin.rbالخاص بإضافة Discourse في رد اتصالafter_initialize. -
كيفية عمل عملية تهيئة Discourse. هناك ملف واحد فقط للقراءة والفهم هنا، وهو ملف discourse/discourse/config/application.rb. هذا هو المكان الذي يتم فيه تحميل معظم تعليمات Rails البرمجية، حيث يتم تحميل جميع تعليمات الإضافات البرمجية، وحيث يتم تهيئة الإضافات. قم بالاطلاع على هذا الملف بعمق وفهم أين وكيف يتم طلب ملفات الإضافات ثم تهيئتها.
كيفية عمل إضافة Discourse كـ gem
لجمع كل ذلك معًا، ستحتاج بعد ذلك إلى فهم كيفية دمج الموضوعين المذكورين أعلاه في إضافة Discourse كـ gem. لاحظ بشكل خاص ما يلي:
-
في إضافة Discourse كـ gem، يلعب ملف
engine.rbدورًا مشابهًا لملفplugin.rb، مع بعض الاختلافات في التكوين. تحقق من ملف subscription client gem engine.rb وقارنه بملف plugin.rb قياسي. -
في إضافة 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.
إذا كانت لديك أي أسئلة أو واجهت صعوبة، فانشر هنا وسأساعدك.