Я хотел бы разработать ряд нетривиальных приложений Rails, которые реализуют основной набор функциональных возможностей, но каждый из них имеет определенные настройки, расширения и эстетические различия. Как я могу вытащить основные функции (модели, контроллеры, помощники, классы поддержки, тесты), общие для всех этих систем, таким образом, чтобы обновление ядра принесло пользу каждому приложению на его основе?Как я могу абстрагироваться от основной функциональности нескольких приложений Rails?
Я видел Rails Двигатели, но они кажутся слишком отстраненными, почти слишком абстрагируемыми, чтобы их можно было использовать. Я могу показаться, что они полезны для добавления одного компонента в существующее приложение, например, привязки движка блога к существующему сайту электронной коммерции. Поскольку двигатели, по-видимому, в основном автономны, кажется сложным и неудобным переопределять их функциональность и представления при сохранении DRY.
Я также рассмотрел абстрагирование кода на драгоценный камень, но это кажется немного странным. Я заставляю жемчужину зависеть от драгоценных камней Rails, а также определить модели контроллеров &, а затем подклассифицировать их в разных приложениях? Или я могу определить многие модули внутри драгоценного камня, которые я включаю в разные места внутри моих различных приложений? Как проверить жемчужину, а затем проверить набор настроек и переопределенные функции поверх него? Я также обеспокоен тем, как я буду разрабатывать Gem и Rails-приложения в тандеме, могу ли я создать git-хранилище жемчужины в приложении и оттолкнуться от этого, поэтому мне не нужно создавать новый камень на каждой итерации? Кроме того, есть ли частные жемчужины/я могу установить собственный источник драгоценных камней?
Также любые общие предложения для такого рода обязательств? Абстракционные парадигмы придерживаться? Требуется чтение? Комментарии от мудрых, кто сделал это раньше? Благодаря!
Плагин действительно был бы самым простым способом ... – severin
Можете ли вы попытаться объяснить, как я буду открывать (или подкласс, если повторное открытие невозможно) классы, определенные в моем плагине внутри приложения? Моя основная проблема заключается в совместном использовании кода между плагином и приложением, где говорят, что нормальное поведение модели определено в плагине, но приложение переопределяет только несколько методов. Если я определяю модель в приложении, Rails сначала смотрит туда, находит класс, который он ищет, и определяет отсутствующую константу. Rails никогда не смотрит в плагин, а это означает, что ни одна из моих основных функций не приходит. – hornairs