В настоящее время я работаю над проектом Rails 3, который разделен на четыре части:
Поскольку модели являются общими для трех ключевых компонентов, я хочу, чтобы они не входили в один основной проект, однако каждая часть требует доступа к моделям, но я не Я не хочу повторять код и везде иметь разные версии.
В настоящее время у меня есть код модели в геме, и в Gemfile каждого проекта я ссылаюсь на них со следующей строкой:
gem "my_models", :path => "../my_models/"
Однако, когда я развертываю наш тест серверов для моих коллег, чтобы оценить систему. Мне нужно извлечь модели из внешнего репозитория, поэтому я заменяю приведенную выше строку следующим:
gem "my_models", :git => "git@private.repository.com:username/my_models.git"
Это само по себе работает хорошо, но довольно неуклюже с точки зрения 'версии' (т.е. мне нужно поднимать версию каждый раз, когда я хочу развернуть изменения на тестовых серверах), переключите строку over, чтобы использовать git вместо local, и убедиться, что я отправляю файлы правильно.
Раньше я использовал общий подмодуль git, но это было так же неудобно.
Я бы предпочел не собирать все в один мега-проект, поскольку они имеют тенденцию становиться чудовищными и сложными в обслуживании, и я также хотел бы разделить проблемы, если это возможно, поэтому любые изменения, которые я вношу на сайте администрирования, не имеют большого шанса повлиять на другие компоненты - очевидно модели могут вызвать проблемы, но это риск, который я рассмотрел и понимаю.
Что люди могут предложить, когда дело доходит до чего-то подобного? Или я ошибаюсь?
Дополнительная информация:
Это приложение представляет собой переписанный вариант существующего веб-сайта, который следует модели «объединить все в один проект» - к сожалению, есть две проблемы здесь:
По сути, я хочу разделить две вещи - внешний интерфейс (являющийся общедоступным веб-сайтом и API) и серверную часть - все, что я знаю о разработке программного обеспечения, говорит мне что объединение всего этого вместе - не идеальное решение (и прошлая история показывает мне, что разделение этих двух является хорошим шагом с точки зрения обеспечения производительности внешнего интерфейса).
Возможно, мне нужно взглянуть на это под другим углом - оставить модели в каждом проекте и вместо того, чтобы делить их между проектами, нужно разрезать -низ подмножества функций для каждой функциональной области (т. е. бэкэнд должен знать, кто создал сообщение, но фронтенд на самом деле не заботится об этом, поэтому опустите эту логику при чтении в модели).