Публикация сайта ASP.NET MVC2 с помощью веб-развертывания

В настоящее время я использую Web Deploy, http://learn.iis.net/page.aspx/346 / web-deploy / , чтобы опубликовать мое приложение MVC2. Раньше оно работало хорошо, но теперь дошло до того, что я не могу продолжать его использовать:

Когда приложение MVC было маленьким и имело всего несколько пользователей, его было легко опубликовать. Просто щелкните проект правой кнопкой мыши в Visual Studio и выберите «Опубликовать». А поскольку было всего несколько пользователей, было легко найти время, когда никто не использовал сайт, чтобы сделать быстрое обновление.

Затем приложение стало больше, и у него появилось еще несколько пользователей. Действие «Публикация» стало длиться все дольше и дольше, а иногда и прекращалось. Даже когда я переработал пул приложений перед развертыванием, это все равно заняло много времени.

Также стало труднее найти время, когда никто не использовал сайт, поэтому обновление могло быть выполнено, никого не затрагивая.

Затем действие «Опубликовать» начинало отключаться каждый раз, и мне пришлось переключиться на ручное развертывание в соответствии с этим ранее оставшимся без ответа вопросом: Visual Studio 2010 - время ожидания веб-развертывания - что делать?

Теперь ручное развертывание занимает все больше и больше времени, от 5 до 20 минут. И количество пользователей значительно выросло, поэтому развертывание всегда влияет на кого-то (медленное время ответа, таймауты, недоступность сайта и т. Д.)

Итак, что я могу сделать? Есть ли лучшая альтернатива использованию веб-развертывания?

Изменить:

Сегодняшнее развертывание заняло 18 минут, чтобы опубликовать всего 49 измененных файлов. Ситуация просто смешная и сейчас это одна из самых больших слабостей нашего сайта. Так что я' m, начиная с приличного размера награды в надежде решить эту проблему.

Еще несколько вопросов, которые могут привести к решению:

  • Почему это займет так много времени, когда было изменено всего несколько файлов?
  • Почему файл zip-архив веб-развертывания всегда включает в себя всю кодовую базу, а не только измененные файлы?
  • Почему бы мне просто не скопировать вручную измененные файлы и пропустить развертывание в Интернете? Но сложно вручную определить, какие файлы были изменены. Я использую SVN - есть ли у него способ вывода только файлов, которые изменились между двумя ветвями?
  • Какие еще вопросы я должен задать, но еще не подумал?

В ответ на ответы:

Re : http://www.troyhunt.com/2010/11/you-deploying-it-wrong-teamcity_24.html Именно так я выполнял развертывание и был бы идеальным методом. Веб-развертывание правильно определяет, какие файлы были изменены, однако время ожидания истекает, и публикации не происходит. В решении около 2500 файлов, возможно, требуется слишком много времени, чтобы определить, какие из них были изменены? Или может случиться так, что у публикации короткое значение тайм-аута, и простая загрузка 15-мегабайтного zip-файла использует все это время.

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

Предложение создать новую папку для каждого выпуска, а затем просто изменить IIS, чтобы указать на эту новую папку, звучит как будто это приведет к сокращению времени простоя / замедления во время публикации. Но это очень ручной процесс, и я бы предпочел что-то более автоматизированное.

Edit # 2

Мне удалось сузить его и найти именно то, где он медленный, но не почему. Это из журнала развертывания:

[9/02/2011 12:11:56 a.m.] Performing synchronization pass #1.
[9/02/2011 12:11:56 a.m.] Parameter entry 'IIS Web Application Name/1' is applicable to 'iisApp/C:\src\Site.2010\Site.UI\obj\Release\Package\PackageTmp' because of its scope.
[9/02/2011 12:11:56 a.m.] Parameter entry 'IIS Web Application Name/2' is applicable to 'setAcl/C:\src\Site.2010\Site.UI\obj\Release\Package\PackageTmp' because of its scope.
[9/02/2011 12:11:56 a.m.] Parameter entry 'IIS Web Application Name/2' is applicable to 'setAcl/C:\src\Site.2010\Site.UI\obj\Release\Package\PackageTmp' because of its scope.
[9/02/2011 12:11:56 a.m.] Parameter entry 'Add write permission to App_Data Folder/1' is applicable to 'setAcl/C:\src\Site.2010\Site.UI\obj\Release\Package\PackageTmp\App_Data' because of its scope.
[9/02/2011 12:11:56 a.m.] Source createApp (C:\src\Site.2010\Site.UI\obj\Release\Package\PackageTmp) does not match destination (Default Web Site/virtual-dir/) differing in attributes (isDest['False','True']). Update pending.
[9/02/2011 12:11:56 a.m.] Update operation on createApp (C:\src\Site.2010\Site.UI\obj\Release\Package\PackageTmp) skipped because of rule CreateApplicationRule.
[9/02/2011 12:11:56 a.m.] Source filePath (C:\src\Site.2010\Site.UI\obj\Release\Package\PackageTmp\App_Data\Create.sql) does not match destination (Default Web Site/virtual-dir/App_Data\Create.sql) differing in attributes (size['259691','259697'],lastWriteTime['02/08/2011 10:45:20','02/06/2011 03:48:16']). Update pending.

[400 lines of file updates skipped, time expired 2 seconds ....]

[9/02/2011 12:11:58 a.m.] Delete operation on filePath (Default Web Site/v2/zzz_app_offline.htm) skipped because of rule DoNotDeleteRule.
[9/02/2011 12:11:58 a.m.] Source setAcl (C:\src\Site.2010\Site.UI\obj\Release\Package\PackageTmp) does not match destination (Default Web Site/virtual-dir/) differing in attributes (isDest['False','True'],setAclUser,setAclAccess). Update pending.
[9/02/2011 12:11:58 a.m.] Updating setAcl (Default Web Site/virtual-dir/).
[9/02/2011 12:13:47 a.m.] Source setAcl (C:\src\Site.2010\Site.UI\obj\Release\Package\PackageTmp) does not match destination (Default Web Site/virtual-dir/) differing in attributes (isDest['False','True'],setAclUser,setAclAccess). Update pending.
[9/02/2011 12:13:47 a.m.] Updating setAcl (Default Web Site/virtual-dir/).
[9/02/2011 12:17:11 a.m.] Source setAcl (C:\src\Site.2010\Site.UI\obj\Release\Package\PackageTmp\App_Data) does not match destination (Default Web Site/virtual-dir//App_Data) differing in attributes (isDest['False','True'],setAclUser,setAclAccess). Update pending.
[9/02/2011 12:17:11 a.m.] Updating setAcl (Default Web Site/virtual-dir//App_Data).
[9/02/2011 12:17:11 a.m.] The dependency check 'DependencyCheckInUse' found no issues.
[9/02/2011 12:17:11 a.m.] The synchronization completed in 1 pass(es).

Причиной медленной работы является компонент «Обновление setAcl» . Я изучаю списки ACL блока разработки и блока сервера, чтобы увидеть, в чем разница. Однако кажется крайне плохой идеей копировать ACL из окна разработчика в ящик сервера! У меня уже был настроен ACL на сервере.

16
задан Community 23 May 2017 в 12:16
поделиться