Главная страница   /   21.2. Развертывание при помощи утилиты XCOPY (ASP.NET MVC 4 в действии

ASP.NET MVC 4 в действии

ASP.NET MVC 4 в действии

Джеффри Палермо

21.2. Развертывание при помощи утилиты XCOPY

Независимо от используемой версии IIS не каждый файл вашего приложения должен присутствовать в окончательном пункте назначения сервера. Это похоже на то, как при Web Forms развертывании не должны развертываться выделенные файлы. То же самое справедливо и для MVC развертываний. Для MVC веб-сайта необходимы следующие файлы:

  • Global.asax
  • Web.config
  • Файлы контента (JavaScript, изображения, статический HTML и т.д.)
  • Представления
  • Скомпилированные сборки

Развертывания сами по себе могут быть сложными. Прибавьте такие сложности, как инсталляторы, и возможно, развертывание станет еще труднее выполнять и поддерживать в работоспособном состоянии. Для того чтобы управлять инсталляторами, обычно требуется человек, зарегистрированный на конечной машине, и автоматические инсталляторы возможны, но все еще сложны. Лог-файлы неверно выполненной инсталляции обычно состоят из регистратора MSI, который может быть чрезвычайно пространным и непонятным. В .NET Framework все еще отсутствует встроенное решение по развертыванию приложений, но вы можете сократить большинство из этих трудностей путем написания сценария вашего развертывания.

Для многих сценариев развертывания приложения не столь необходим инсталлятор. Если предположить, что конечная машина уже корректно настроена, то простого копирования файлов будет достаточно для развертывания приложения. Такой тип развертывания называется XCOPY развертывание. Термин пошел от DOS-команды XCOPY, которая позволяла копировать множество файлов в рамках одной команды, а также предоставляла множество других возможностей.

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

Как упоминалось ранее, при XCOPY развертывании не нужно использовать особую технологию. Файлы пакетов, NAnt скрипты, MSBuild скрипты и трехкомпонентные продукты такие, как Final-Builder, – все это популярные варианты создания XCOPY развертываний. В частности, наиболее привлекательными являются последние варианты, включающие в себя возможности, которые содействуют автоматическим развертываниям. В главе 22 мы рассмотрим использование преимуществ NAnt для выполнения задач развертывания, в дополнение к копированию файлов.

Выбор стратегии инсталляции

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

XCOPY развертывания отлично работают в большинстве веб-сценариев, но они не предоставляют никаких исключительных возможностей удаления. Несмотря на то, что существуют другие механизмы отката инсталляции, некоторые команды IT governance (организация управления IT) предпочитают для отката изменений пользоваться надежностью инсталляторов.

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

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

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

Листинг 21-1: Наш простой контроллер
public class ProductController : Controller
{
	private static readonly Product[] Products =
			new[]
      {
          new Product {Id = 1, Name = "Basketball",
              Description = "You bounce it."},
          new Product {Id = 2, Name = "Baseball",
              Description = "You throw it."},
          new Product {Id = 3, Name = "Football",
              Description = "You punt it."},
          new Product {Id = 4, Name = "Golf ball",
              Description = "You hook or slice it."}
      };
	public ActionResult List()
	{
		ViewData["Products"] = Products;
		return View();
	}
	public ActionResult Show(int id)
	{
		var product = Products.FirstOrDefault(p => p.Id == id);
		ViewData["Product"] = product;
		return View();
	}
}

Строка 3: Пустой список товаров

Строка 15: Непараметризованное действие

Строка 20: Один параметр, из RouteData

При переходе к действию List отображается экран, продемонстрированный на рисунке 21-1.

Рисунок 21-1: Локальный запуск MVC приложения демонстрирует простой список товаров

Для того чтобы развернуть это приложение нам сначала нужно создать локальную папку и скопировать в нее набор файлов нашего проекта. Нам нужно скопировать скомпилированные DLL приложения (и любые другие зависимости) вместе с представлениями, файлами контента (например, CSS и изображения), файлы Global.asax и Web.config.

Структура папок для используемого нами приложения продемонстрирована на рисунке 21-2.

Рисунок 21-2: Структура директорий скомпилированного MVC приложения, готового к развертыванию

К счастью, нам не нужно извлекать эти индивидуальные файлы вручную – Visual Studio может скопировать эти необходимые для развертывания файлы посредством использования диалогового окна Publish, доступ к которому можно получить при помощи нажатия правой кнопки мыши на проекте в Solution Explorer и выбора пункта Publish. Это диалоговое окно (продемонстрированное на рисунке 21-3) может использоваться для копирования необходимых для развертывания файлов в конкретную директорию.

Рисунок 21-3: Диалоговое окно Publish может использоваться для копирования развертываемых файлов в конкретную директорию

В качестве альтернативы использования диалогового окна Publish программы Visual Studio также можно вызвать такой же механизм из командной строки путем запуска MSBuild относительно файла проекта:

%WINDIR%\Microsoft.NET\Framework\v4.0.30319\msbuild.exe
	HostingSample\HostingSample.csproj /
	t:ResolveReferences;_CopyWebApplication /
	p:WebProjectOutputDir=C:\HostingSample /p:OutDir=C:\HostingSample

Эта команда вызывает MSBuild.exe относительно файла проекта. Мы указываем ему на то, чтобы он запустил 2 команды (ResolveReferences и _CopyWebApplication), которые приведут к тому, что развертываемые файлы будут скопированы в директории, указанные в свойствах WebProjectOutputDir и OutDir. После копирования структура директорий будет совпадать с той, что продемонстрирована на рисунке 21-2.

Теперь, когда наши файлы готовы к развертыванию, мы можем скопировать их на наш сервер (например, через сетевой ресурс), но нам также необходимо удостовериться в том, что IIS настроена для запуска приложения. Сначала мы рассмотрим то, как сделать это для IIS 7, а затем вкратце обсудим вопросы, связанные с более ранней версией IIS 6.