Вопрос

Фон: у нас есть приложение A, B, и планируем добавить больше приложений в это же приложение. Приложения достаточно похожи, они могут поделиться многими взглядами, активами и действиями. В настоящее время A, B Live в одном приложении Rails (2.3.10). C будет достаточно похожим, что это также может быть в этом приложении Rails.

Проблема: поскольку мы продолжаем добавлять больше приложений в это одно приложение, будет слишком много логики случая, что приложение скоро станет кошмаром для обслуживания. Также будут потенциальные проблемы пространства имен. Тем не менее, приложения очень похожи по функции и макету, также имеет смысл держать их в одном приложении, так что это одно приложение для поддержания (поскольку примерно 50% внешнего вида/функциональности сайта будет обмен).

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

Некоторые вещи, о которых мы думали/пытались: двигатели. Сделайте каждое приложение двигателем. Это позволило бы нам основать маршруты на домене. Это также позволяет нам вытащить контроллеры, модели и представления для конкретного приложения. Это решение не кажется идеальным, так как мы не будем повторно использовать приложения в ближайшее время. И явное заявление хоста на маршрутах не кажется правильным.

Скиннинг/Темы. Логика авторов будет отличаться между приложениями. Каждая пользовательская модель будет отличаться. Так что это не просто проблема с кожей.

В приложении/просмотре добавить папку Sitea для просмотров Sitea, SiteB для просмотров SiteB и так далее. Сделайте то же самое для контроллеров и моделей. Это по -прежнему довольно грязно, и, поскольку оно не последовало за соглашениями об именах, оно не так хорошо работало с рельсами и сделало большую часть кода.

Создание другого приложения Rails. Мы просто не хотели поддерживать тот же контроллер или представление в 2 приложениях, если они идентичны.

Что мы хотим сделать, так это сделать приложение разумно использовать контроллер на основе хоста. Таким образом, для каждого приложения будет контроллер сеансов, и, возможно, какой -то контроллер сеанса родительских сеансов для общей логики (сейчас не нужна). В каждом из этих контроллеров сеанса он обрабатывает аутентификацию для этого конкретного приложения. Таким образом, если домен является a.mysite.com, он будет использовать контроллер сеанса для приложения A и знать для использования представлений приложения A, моделей, контроллеров. И если домен является b.mysite, он будет использовать контроллер сеанса для b. И будет пользовательская модель для модели A и пользователя для B, которая также будет определена доменом.

У кого -нибудь есть какие -либо предложения или опыт работы в этой ситуации? И в идеале использовать Rails 2.3.x в качестве обновления до Rails 3 не вариант сейчас.

Это было полезно?

Решение

Придумать делает именно это. Вы бы хорошо ознакомились с его архитектурой и применить эту архитектуру к своему собственному делу.

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

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

Другие советы

Я использовал плагин поддержки темы раньше и динамически устанавливал тему на основе URI запроса:

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

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

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

Похоже, вы хотите сделать приложение «базовое» плагин и использовать его в каждом из приложений вашего сайта. Вы можете использовать что-то вроде SVN-EXTERN, чтобы это автоматически обновлялось, когда что-то меняется.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top