مولد إضافات Rails

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

خطتي الأولى هي كتابة كود للاستعلام عن قاعدة البيانات للحصول على قيمة أحتاجها من جدول post_custom_fields واستخدامها في صفحة المواضيع كجزء صغير طلبه فريق الموديريتور المخضرم لدينا.

غداً سأسحب المشروع من git وأبدأ في البحث عن أمثلة لكود قاعدة البيانات من الإضافات الأخرى لتبدأ بي، وأرى إلى أي مدى يمكنني التقدم.

شكراً جزيلاً مرة أخرى @j.jaffeux

كل صغيرة تساعد، ووجود مولّد مثل هذا لمبتدئي صناعة إضافات discourse مثلي يُقدّر جداً. يمكنك رؤيته هناك في الأسفل، يطلب أن يتم تطويره:

على مر السنين، كتبت عددًا لا يحصى من الإضافات لـ vBulletin، لذا أنا متحمس حقًا لصنع بعض الإضافات البسيطة لـ discourse، صدقني.

إعجابَين (2)

مرحبًا @j.jaffeux

ما زلت أحاول تعلم الإضافات الخاصة بـ Discourse، عدت اليوم إلى مولد الإضافات هذا؛ وحاولت ذلك في بيئة التطوير على macOS، حيث يعمل التطبيق بشكل صحيح، وقد قمت بالكثير من الدراسات حول Ruby و Rails بالإضافة إلى تطوير إضافات صغيرة للتعلم:

# cd /var/Tim/Discourse/plugins
# rails g plugin DiscourseRacoon
# bundle exec 'rails s'

يبدو أن كل شيء يسير على ما يرام، ويتم تثبيت الإضافة بنجاح:

Screen Shot 2020-08-11 at 1.26.36 PM

ولكن عند الانتقال إلى المسار:

http://localhost:3000/discourse_racoon

لا يعمل:

هل أنا مخطئ في افتراضي أن مسارات الإضافة والمتحكم يجب أن تعمل بشكل افتراضي (OOTB) بعد إنشاء الإضافة الأساسية، وهي في هذه الحالة DiscourseRacoon؟

ذهبت إلى مراجعات متعددة عبر الإنترنت، والتي أشارت إلى أنه يجب علينا التحقق من وجود المسار؛ لذا قمت بفحص routes.rb ووجدت أن المسارات محددة هناك؛ كما قمت بفحص discourse_racoon_controller.rb، والمتحكم يحتوي على دالة index (إجراء).

أعتذر، ما زلت أواجه صعوبة في تطوير الإضافات الأكثر إثارة لـ Discourse. ما الذي أفعله خطأ؟ هل لديك أي اقتراحات حول ما يجب أن يكون خطوتي التالية لتصحيح هذا الخطأ؟

شكرًا لك.

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

إنه /discourse-racoon وليس /discourse_racoon

rake routes | grep racoon

                         discourse_racoon          /discourse-racoon                                                           DiscourseRacoon::Engine
        GET  /                      discourse_racoon/discourse_racoon#index
actions GET  /actions(.:format)     discourse_racoon/actions#index
        GET  /actions/:id(.:format) discourse_racoon/actions#show
5 إعجابات

مرحبًا @j.jaffeux

شكرًا لك!

هذا هو الأمر.

أفترض أن هذا اصطلاح في Rails يجب أن أتعلّمه؟ حيث يتم الوصول إلى جميع المسارات المحددة بعلامات سفلية باستخدام شرطات؟

DiscourseRacoon::Engine.routes.draw do
  get "/" => "discourse_racoon#index", constraints: DiscourseRacoonConstraint.new
  get "/actions" => "actions#index", constraints: DiscourseRacoonConstraint.new
  get "/actions/:id" => "actions#show", constraints: DiscourseRacoonConstraint.new
end
إعجاب واحد (1)

مرحبًا،

لقد قمت بتوليد إضافة “مرحبًا بالعالم” باستخدام هذا المولد، وأضفت العديد من عبارات “الكتابة إلى ملف” بلغة Ruby، وراقبت دورة حياة Rails. اكتشفت أن وحدات التحكم في Rails لم تكن تعمل كما هو متوقع (لم تسجل أي شيء، مما يشير إلى أنها كانت تُتجاهل).

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

بالإضافة إلى ذلك، أضفت وحدة تحكم وقالب JavaScript/Ember للصفحة الرئيسية، وأضفت بعض كود HTML و CSS إلى جميع القوالب، وأضفت كود JavaScript لقراءة ملفات تعريف الارتباط (Cookies) وتمييز القوالب.

على سبيل المثال، بعد إجراء بعض التغييرات على الإضافة المولدة بواسطة مولد إضافة Rails:

http://localhost:3000/hello-world/

للاطلاع على التفاصيل الكاملة ولقطات الشاشة، يرجى زيارة:

في الختام، أود أن أشكر @j.jaffeux على مولد إضافة Rails هذا. لقد استمتعت كثيرًا بتصحيح أخطاء وحدات تحكم Rails واستمتعت بتعديله لتقديم المزيد من الكود لفحص كل من دورة حياة Rails وقوالب/وحدات تحكم JavaScript.

آمل أن تساعد تعديلاتي أي شخص آخر، مثلي، لا يزال يتعلم أساسيات تطوير الإضافات في Discourse في أوقات فراغه ويرغب في استخدام مولد إضافة Rails.

انظر أيضًا:

حاليًا، أستمتع حقًا بتصحيح وإصلاح الإضافات المعطلة كجزء من عملية تعلم تطوير إضافات Rails و Discourse :slight_smile:

5 إعجابات

شكرًا لك على حل هذه المشكلة، @neounix! ربما يكون هذا هو الدافع الذي أحتاجه لدفع مشروعي قدمًا.

مرحبًا @j.jaffeux، هل نقل هذه الملفات هو الحل الموصى به، أم أنه يجب تضمينها مع شيء مثل

  load File.expand_path('some-path-here', __dir__) 

أعتقد أنني حاولت تضمينها، لكنني حصلت على خطأ يتعلق بـ… شيء مفقود (لذا أفترض أنني فعلت الشيء الخطأ ولا يستحق توثيقه بدقة).

تحرير: يبدو لي أن وحدة التحكم يتم تحميلها/تشغيلها فعليًا عند الوصول إلى /plugin-path.

3 إعجابات

مرحبًا @pfaffman

حاولت في البداية تحميل وحدات تحكم Ruby باستخدام عبارات load في ملف plugin.rb, لكنها لم تسجل كما هو متوقع.

عند اختبار وحدات تحكم Ruby، استخدمت عبارات Ruby لتسجيل البيانات في نظام الملفات، ثم شغّلت أمر tail -f على ملف السجل لاختبار كيفية تفعيل وحدات التحكم.

للمتعة، أنهيت يومي أمس بكتابة كود لقراءة جميع متغيرات البيئة (ENV) من العمليات وتخزينها في كوكيز باستخدام وحدة تحكم Rails، ثم كتابتها في التطبيق عبر وحدة تحكم Ember.

ممتع جدًا!

أنا مدمن LOL

3 إعجابات

جزء عنوان URL موجود على الجانب الأيسر، بينما مرجع كود Ruby موجود على الجانب الأيمن من =>. يتم تعريف _ مقابل - في سطر mount الخاص بالمحرك.

4 إعجابات

في الجزء الرابع من دليل الإضافات الخاص بـ @eviltrout، يُوصي بتطوير الإضافة خارج قاعدة كود Discourse وإعداد رابط رمزي في مجلد plugins.

هل من المنطقي إضافة خيار -d ~/path/to/plugin_src لتوليد الإضافة في مجلد مختلف، وربما إعداد الرابط الرمزي أيضًا؟

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

أعتذر، لكن قد أقوم بإلغاء هذه الميزة وإغلاق الموضوع مؤقتًا.

على الرغم من أن الطريقة المفضلة لدينا الآن لبدء إضافة (plugin) هي استخدام GitHub - discourse/discourse-plugin-skeleton: Template for Discourse plugins · GitHub كنموذج (انظر الزر الأخضر “استخدم هذا النموذج”)، إلا أنها أقل قوة من حيث التخصيصات.

إنه من الأسهل بكثير بالنسبة لنا الحفاظ على تحديث هذا النموذج.

6 إعجابات