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