В настоящее время я использую Web Deploy, http://learn.iis.net/page.aspx/346/web-deploy/ для публикации моего приложения MVC2.Раньше он работал хорошо, но теперь дошел до того, что я не могу продолжать его использовать:
Когда приложение MVC было маленьким и имело всего несколько пользователей, его было легко опубликовать.Просто щелкните правой кнопкой мыши проект в Visual Studio и выберите «Опубликовать».И поскольку было всего несколько пользователей, было легко найти время, когда никто не использовал сайт для быстрого обновления.
Тогда приложение стало больше и приобрело еще несколько пользователей.Действие «Опубликовать» начиналось все дольше и дольше, а время от времени зависало.Даже когда я перерабатывал пул приложений перед развертыванием, он все еще занимал много времени.
Также стало труднее находить время, когда сайт никто не использовал, поэтому обновление можно было сделать, не затрагивая никого.
Затем действие «Опубликовать» начиналось по тайм-ауту каждый раз, и мне пришлось переключиться на ручное развертывание в соответствии с этим ранее оставшимся без ответа вопросом: Visual Studio 2010 - время веб-развертывания - что делать?
Теперь ручное развертывание занимает все больше и больше, от 5 до 20 минут.И количество пользователей значительно выросло, поэтому развертывание всегда влияет на кого-либо (медленное время отклика, время ожидания, сайт недоступен и т. Д.)
Так что я могу сделать?Есть ли лучшая альтернатива использованию веб-развертывания?
Редактировать:
Сегодняшнее развертывание заняло 18 минут, чтобы опубликовать только 49 измененных файлов.Ситуация просто смешная и является одной из самых больших слабостей нашего сайта прямо сейчас.Итак, я начинаю вознаграждение приличного размера в надежде решить это.
Еще несколько вопросов, которые могут привести к решению:
- Почему это займет так много времени, когда тольконесколько файлов было изменено?
- Почему 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).
Причиной замедления является "Updating setAcl"
компонент.Я изучаю списки ACL блока разработки и блока сервера, чтобы увидеть, что отличается.Однако кажется, что копировать ACL из коробки разработчика в коробку с сервером кажется крайне плохой идеей!Я уже настроил ACL на сервере.