Общие модели между двумя приложениями Rails - какое идеальное решение для рабочего процесса?

В настоящее время я работаю над проектом Rails 3, который разделен на четыре части:

  • Общедоступный веб-сайт
  • Веб-сайт администрирования / серверная часть
  • Модели
  • API для доступа к данным третьих лиц

Поскольку модели являются общими для трех ключевых компонентов, я хочу, чтобы они не входили в один основной проект, однако каждая часть требует доступа к моделям, но я не Я не хочу повторять код и везде иметь разные версии.

В настоящее время у меня есть код модели в геме, и в Gemfile каждого проекта я ссылаюсь на них со следующей строкой:

gem "my_models", :path => "../my_models/"

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

gem "my_models", :git => "git@private.repository.com:username/my_models.git"

Это само по себе работает хорошо, но довольно неуклюже с точки зрения 'версии' (т.е. мне нужно поднимать версию каждый раз, когда я хочу развернуть изменения на тестовых серверах), переключите строку over, чтобы использовать git вместо local, и убедиться, что я отправляю файлы правильно.

Раньше я использовал общий подмодуль git, но это было так же неудобно.

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

Что люди могут предложить, когда дело доходит до чего-то подобного? Или я ошибаюсь?

Дополнительная информация:

Это приложение представляет собой переписанный вариант существующего веб-сайта, который следует модели «объединить все в один проект» - к сожалению, есть две проблемы здесь:

  1. Приложение было плохо разработано - я унаследовал этот проект, и когда я впервые его взял, время загрузки составляло ~ 2 минуты на страницу с одним пользователем - с тех пор оно было сокращено, но все еще есть проблемы во всем
  2. Мы в настоящее время находятся на пределе возможностей текущего сайта, и мы ожидаем, что нам потребуется взять на себя дополнительную нагрузку в следующие 6 месяцев, однако масштабирование с помощью приложения «все в одном» означает, что мы будем тратить ресурсы на масштабирование серверная часть сайта, которая в ней не нуждается.

По сути, я хочу разделить две вещи - внешний интерфейс (являющийся общедоступным веб-сайтом и API) и серверную часть - все, что я знаю о разработке программного обеспечения, говорит мне что объединение всего этого вместе - не идеальное решение (и прошлая история показывает мне, что разделение этих двух является хорошим шагом с точки зрения обеспечения производительности внешнего интерфейса).

Возможно, мне нужно взглянуть на это под другим углом - оставить модели в каждом проекте и вместо того, чтобы делить их между проектами, нужно разрезать -низ подмножества функций для каждой функциональной области (т. е. бэкэнд должен знать, кто создал сообщение, но фронтенд на самом деле не заботится об этом, поэтому опустите эту логику при чтении в модели).

53
задан tereško 15 June 2013 в 00:31
поделиться