Фон: у нас есть приложение a, b и мы планируем добавить больше приложений в это же приложение.Приложения настолько схожи, что могут использовать множество представлений, ресурсов и действий.В настоящее время a, b живут в одном приложении rails (2.3.10).c будет достаточно похожим, что могло бы быть и в этом приложении rails.
Проблема: поскольку мы продолжаем добавлять больше приложений в это одно приложение, будет слишком много логики кейсов, что приложение скоро станеткошмар, чтобы поддерживать.Также будут потенциальные проблемы с пространством имен.Тем не менее, приложения очень похожи по функциям и компоновке, также имеет смысл хранить их в одном приложении, так что это одно приложение для поддержки (так как примерно 50% внешнего вида / функциональности сайта будет общим).
То, что мы пытаемся сделать, - это поддерживать чистоту в максимально возможной степени, чтобы нескольким командам было легко работать и поддерживать.
Некоторые вещи, о которых мы думали / пытаемся: Двигатели.Сделайте каждое приложение движком.Это позволило бы нам основывать маршруты на домене.Это также позволяет нам извлекать контроллеры, модели и представления для конкретного приложения.Это решение не кажется идеальным, поскольку мы не будем повторно использовать приложения в ближайшее время.И явно указывать хост в маршрутах кажется неправильным.
Skinning / themes.Логика аутентификации будет отличаться между приложениями.Каждая модель пользователя будет отличаться.Так что это не просто проблема с кожей.
В приложении / представлении добавьте папку sitea для представлений sitea, siteb для представлений siteb и так далее.Сделайте то же самое для контроллеров и моделей.Это все еще довольно грязно, и поскольку оно не следовало соглашениям об именах, оно не очень хорошо работало с rails и сделало большую часть кода более грязной.
Создание другого приложения rails.Мы просто не хотели поддерживать один и тот же контроллер или представление в 2 приложениях, если они идентичны.
Мы хотим, чтобы приложение интеллектуально использовало контроллер на основе хоста.Таким образом, для каждого приложения был бы контроллер сессий и, возможно, какой-нибудь родительский контроллер сессий для разделяемой логики (сейчас не требуется).В каждом из этих контроллеров сеанса он обрабатывает аутентификацию для этого конкретного приложения.Поэтому, если домен a.mysite.com, он будет использовать контроллер сеанса для приложения a и знать, как использовать представления, модели, контроллеры приложения a.И если домен b.mysite, он будет использовать контроллер сеанса для b.И будет модель пользователя для a и модель пользователя для b, которая также будет определяться доменом.
Есть ли у кого-нибудь какие-либо предложения или опыт в этой ситуации?И в идеале использование rails 2.3.x в качестве обновления до rails 3 сейчас не вариант.