Я решил окончательно закрепить процессы развертывания моей команды, от супа до орехов.Последняя остающаяся болевая точка для нас - это управление базой данных и миграция / управление данными во время выполнения.Вот два примера, хотя многие существуют:
- Если вы выпускаете новую функцию «Загрузить», автоматически создайте каталог загрузки и настройте разрешения.В более поздних выпусках проверяйте существование / разрешения - навсегда, автоматически.
- Если значение в базе данных (скажем, состояние учетной записи «Регистрация») больше не действует, автоматически переносите данные в базе данных на правильные значения,учитывая некоторый набор бизнес-правил.
Я заинтересован в реализации инфраструктуры, которая позволяет разработчикам управлять и развертывать эти изменения с той же легкостью, с которой мы управляем и разворачиваем наш код.
Итак, первый вопрос: 1.Какие существуют инструменты / структуры, обеспечивающие такую возможность?
В общем, это кажется проблемой для любого языка и платформы.В моем конкретном случае я развертываю приложение .NET MVC2, которое использует Fluent NHibernate для абстракции базы данных.В процессе развертывания у меня уже есть инструмент, который запускает SchemaUpdate от NHibernate - это потрясающе.
То, что я создал для решения этой проблемы по-своему, - это инструмент, который сканирует целевые сборки на предмет классов, которые наследуютиз определенного абстрактного класса (Deployment).Этот абстрактный класс предоставляет хуки, которые вы можете переопределить и реализовать свой произвольный код развертывания - в контексте кодовой базы вашего приложения.класс Deployment также обеспечивает механизм управления версиями, а инструмент управляет текущей «версией развертывания» заданного работающего приложения.Затем пользовательская задача NAnt склеивает это вместе со сценарием развертывания NAnt, вызывая зацепки в подходящее время.
Кажется, это работает хорошо и отвечает моим целям - но вот моя претензия и приводит к моейВторой вопрос: 2.Конечно, то, что я только что написал, должно уже существовать.Если да, можете ли вы указать мне на это? и 3.Кто-нибудь начал идти по этому пути и имел представление о проблемах с этим подходом?
Наконец, если что-то подобное существует, но не на платформе .NET, пожалуйста, все же дайте мне знать - как я будубольше интересуюсь портированием известного решения, чем начни с нуля для моего собственного решения.
Спасибо всем, я очень ценю ваши отзывы!