Привет, @leighno5
Исходя из личного опыта, я считаю, что написание плагинов для Ruby для решения тех задач, которые вы пытаетесь решить в своём «форке», гораздо проще реализовать через плагин, когда мы достаточно хорошо понимаем Ruby и Rails, чтобы легко писать плагины для Discourse (или модифицировать любой класс Rails).
Если мы не понимаем Rails и Ruby достаточно хорошо, чтобы написать плагин для Discourse, то, по моему опыту, форкить Discourse и лезть в ядро — это «ошибочный путь».
Думаю, аналогия будет такой (извините за простую идею):
«Кто-то с трудом ходит, поэтому решает вместо этого бегать».
Позвольте объяснить, если вы не против:
Прежде чем я начал писать приложения на Rails (ничего общего с Discourse) и пробовал создавать плагины для Discourse, я немного терялся и даже, кажется, немного раздражался на Discourse. Это как когда вы в первый раз пытаетесь ударить по гольф-мячу: он не летит прямо, и требуется много усилий, чтобы попасть в середину фэйрвея. Форкить Discourse — это как доставать большой драйвер на тренировочном поле, прежде чем вы научитесь играть короткими клюшками и делать чип-шоты и путты!
Я взял паузу в работе с кодом Discourse (это было много месяцев назад) и какое-то время занимался созданием нескольких приложений на Rails с нуля. И только после этого у меня начала формироваться «интуитивная» уверенность в Rails. После этого, когда я решил модифицировать Discourse (сейчас я использую в продакшене 6 собственных плагинов, написанных для Discourse), всё стало интуитивно понятным, а плагины, изменяющие ядро Ruby, казались слишком простыми.
Ruby очень гибок. Мы можем переопределить любой класс, любой объект. Мы можем пересмотреть каждый аспект Ruby. С некоторым опытом начинаешь восклицать: «ВАУ, я и не знал, что Ruby настолько гибок (и мощен)», и начинаешь «становиться опасным», потому что с Ruby и Rails можно летать, как Супермен. В тот момент мы находимся лишь в начале своего пути в Ruby и Rails, а не в его конце!
С знаниями Ruby и Rails, которые я приобрёл в 2020 году, зная то, что знаю сейчас, я бы никогда не стал форкать Discourse и вносить изменения в ядро Ruby и Rails, как вы предлагаете, потому что плагины позволяют слишком легко переопределять и модифицировать классы Ruby, если мы понимаем основы классов Ruby и основы метапрограммирования.
Думаю, что я хочу сказать, и простите за прямоту, это следующее: если кто-то считает, что ему нужно лезть в ядро Discourse, чтобы внести какие-то незначительные изменения в Ruby, значит, он недостаточно хорошо понимает Ruby и Rails. Потому что если бы он понимал, то не лез бы в ядро, а просто написал бы быстрый плагин для переопределения классов и с удовольствием занимался бы monkey-patching.
С другой стороны, если бы я хотел сделать что-то безумное и страдать, например, заменить EmberJS в Discourse на React и Ant Design, то форк был бы единственным выходом! Однако, на мой взгляд, «Discourse» определяется не «JavaScript-библиотеками». Discourse определяется навыками команды разработки ядра (людьми), их вниманием к деталям, качеством обслуживания клиентов, командным подходом к разработке открытого кода, их конвейером функций SPA и всем их тяжёлым трудом! Было бы немного безумием (на мой взгляд) выбросить весь этот интеллектуальный потенциал только потому, что нам может больше нравиться Ant Design (с React) или VueJS вместо Ember.
Это же справедливо ещё в большей степени, если мы просто собираемся понемногу менять ядро Discourse! Было бы немного «сумасшедшим» форкнуть его ради этого, выбросив «людей», которые и есть «настоящий» Discourse (а не код).
Я говорю это только исходя из своего личного пути в 2020 году, когда я изучал Ruby и Rails. Сейчас основы становятся лёгкими, и я «становлюсь опасным», ха-ха. Я могу «потыкаться с помощью monkey patching во что угодно», что не всегда хорошо; и именно для этого существуют плагины Discourse.
Держите ядро твёрдым как скала и наслаждайтесь «потыкиванием» в Discourse с помощью плагинов.
Надеюсь, это поможет.
Кстати, пока я писал этот ответ, вы написали:
Это, пожалуй, подтверждает мою точку зрения, не так ли?
Написание «плагина» в Discourse — это написание «кода на Ruby» (на одном уровне), а для других это уходит гораздо глубже (в EmberJS).
Прежде чем вы начнёте писать плагины для Discourse, мой дружеский совет, который, возможно, покажется вам не имеющим ценности, — сначала разработайте несколько приложений на Ruby on Rails. Изучите Ruby и Rails, хотя бы основы, и после этого вы сами ответите на свой вопрос выше.
Сегодня утром я три часа провёл в телефонной конференции с клиентом, обсуждая приложение на Rails, валидации, модели и т. д., а затем, взяв перерыв после реализации некоторых пунктов из обсуждения, я прочитал ваш пост.
Самый короткий путь к написанию плагинов для Discourse, на мой взгляд, — сначала изучить Rails.
Надеюсь, это поможет!