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