Я хотел бы разработать ряд нетривиальных приложений на Rails, которые все реализуют базовый набор функций, но у каждого есть определенные специфические настройки, расширения и эстетические различия. Как я могу извлечь основные функции (модели, контроллеры, помощники, классы поддержки, тесты), общие для всех этих систем, таким образом, чтобы обновление ядра принесло пользу каждому приложению на его основе?
Я видел Rails Engines, но они кажутся слишком отстраненными, почти слишком абстрактными, чтобы на них можно было опираться. Мне может показаться, что они полезны для добавления одного компонента в существующее приложение, например, для добавления движка блога на существующий сайт электронной коммерции. Поскольку кажется, что движки в основном самодостаточны, трудно и неудобно переопределять их функциональность и представления при сохранении СУХОГО.
Я также подумал о том, чтобы абстрагировать код в гем, но это кажется немного странным. Делаю ли я, чтобы гем зависел от гемов Rails, и определяю модели и контроллеры внутри него, а затем делаю их подклассы в моих различных приложениях? Или я определяю много модулей внутри драгоценного камня, которые я включаю в различные места в моих различных приложениях? Как мне проверить гем, а затем протестировать набор настроек и переопределенную функциональность поверх него? Меня также волнует вопрос о том, как я буду разрабатывать гем и приложения Rails в тандеме. Могу ли я вложить в приложение git-репозиторий драгоценного камня и отказаться от него, чтобы мне не приходилось создавать новый гем каждую итерацию? Кроме того, есть ли частные хосты гемов / могу ли я установить свой собственный источник гемов?
Кроме того, есть какие-либо общие предложения для такого рода предприятий? Абстракция парадигм придерживаться? Требуется чтение? Комментарии мудрых, которые делали это раньше? Спасибо!