Как избежать хаотичного развертывания веб-приложений ASP.NET? - PullRequest
3 голосов
/ 28 апреля 2010

Хорошо, вот в чем дело.

Я разрабатываю существующее (оно стало классическим приложением ASP, так что вы можете себе представить: P) веб-приложение под ASP.NET 4.0 и SQLServer 2005. Мы - 4 разработчика, использующие локальные экземпляры SQL Server 2005 Express, имеющие исходный код и проект базы данных Visual Studio

В этом веб-приложении есть несколько "вселенных" (так мы его называем). У каждого юниверса есть своя собственная база данных (в настоящее время на одном сервере), но все они используют одну и ту же схему (таблицы, sprocs и т. Д.) И один и тот же исходный код / ​​код сайта.

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

Недавно мы создали проект базы данных Visual Studio для управления схемой и создания сценариев diff-схемы с различными целями.

Понятия не имею, как сложить кусочки

Я бы хотел:

  1. У меня есть способ выполнить «синхронизацию» развертывания на целевом сервере (к счастью, у меня есть полный RDC-доступ к серверам, поэтому я могу при необходимости установить объекты). Под «синхронизированным» развертыванием я имею в виду, что я не хочу полностью развертывать все приложение, потому что в нем много файлов, и я просто хочу развернуть эти новые или измененные.
  2. Создание сценариев обновления diff-sql для каждой цели базы данных и объединение их всего в 1 сценарий. Для этого у меня должен быть где-то список имен баз данных.
  3. Копирование файлов сайта и выполнение сгенерированного сценария sql простым и автоматизированным способом.

Я читал о MSBuild, MS WebDeploy, NAnt и т. Д. Но я не знаю, с чего начать, и очень хочу избавиться от этого руководства по развертыванию.

Если есть лучший и простой способ сделать это, чем я перечислил, я буду рад прочитать ваш вариант.

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

Любая помощь будет по достоинству оценена,

Спасибо всем,

Привет

1 Ответ

1 голос
/ 28 апреля 2010

Слышали ли вы о термине мультитенантность? Возможно, стоит взглянуть на это, чтобы узнать, применимо ли это к вашему «Мультивселенному», особенно если одна вселенная никогда не доступна другой ...

См:

http://en.wikipedia.org/wiki/Multitenancy

http://msdn.microsoft.com/en-us/library/aa479086.aspx

UPDATE:

Если приложение и база данных одинаковы для каждого клиента (или арендатора), я считаю, что существуют приложения, которые могут помочь в предоставлении того же кода / db, что и приложение SaaS? т. е. другой уровень приложения / конфигурации, который может обрабатывать развертывания и т. д.

Я думаю, они называются приложениями Platform as a Service (PaaS):

см .: http://en.wikipedia.org/wiki/Platform_as_a_service

В вашем случае возможна мультитенантность, в зависимости от требований безопасности клиента, с небольшим количеством работы (или большим количеством работы):

Вариант 1:

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

Вариант 2:

Вы можете создать как один экземпляр приложения, так и использовать одну базу данных. Вам необходимо добавить «TenantID» в каждую таблицу и настроить весь свой код так, чтобы он принимал TenantID для обеспечения безопасности / изоляции данных. Опять же, вам нужно обнаружить / отличить Арендатора на основе URL, чтобы установить TenantID для сеанса, используемого для каждого вызова базы данных. (Это уменьшит развертывание вашего сайта и базы данных до одного)

...