Многодоменное приложение рельсов. Как разумно использовать MVC? - PullRequest
1 голос
/ 28 декабря 2010

Фон: у нас есть приложение 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 сейчас не вариант.

Ответы [ 3 ]

1 голос
/ 29 декабря 2010

Devise делает именно это. Тебе не помешало бы проверить его архитектуру и применить ее в своем случае.

У вас будет несколько отдельных приложений Rails. Общий код будет отдельным проектом, возможно, распространяемым как гем или, по крайней мере, отдельным репозиторием Git. Общий код будет включать в себя множество действий контроллера и множество шаблонов представления, которые должны иметь разумные значения по умолчанию и которые будут переопределены в некоторых приложениях, но не в других.

Весь пользовательский код для приложения A будет принадлежать проекту, целиком посвященному содержанию пользовательского кода для приложения A. Это будет собственное полнофункциональное приложение Rails и будет сильно зависеть от большинства разумных настроек по умолчанию общий код в проекте общего кода.

0 голосов
/ 29 декабря 2010

Звучит так, как будто вы хотите сделать «базовое» приложение плагином и использовать его в каждом приложении вашего сайта. Вы можете использовать что-то вроде svn-extern, чтобы оно автоматически обновлялось при каждом изменении.

0 голосов
/ 28 декабря 2010

Ранее я использовал плагин поддержки тем и динамически устанавливал тему на основе запроса uri:

http://mattmccray.com/svn/rails/plugins/theme_support

Вероятно, потребуется некоторая работа для поддержки Rails 2.3.

Обновление: Похоже, что есть переписать: https://github.com/dasil003/rails-multisite

...