我目前使用Web Deploy,http://learn.iis.net/page.aspx/346/web-deploy/发布我的MVC2应用程序。它曾经运行良好,但现在它已经到了我无法继续使用它的程度:用Web Deploy发布ASP.NET MVC2网站
当MVC应用程序很小,只有很少的用户时,它很容易发布。只需右键单击Visual Studio中的项目,然后选择“发布”。而且由于只有少数用户,很容易找到无人使用该站点进行快速更新的时间。
然后,该应用程序变得更大,并有更多的用户。 “发布”行动开始时间越来越长,偶尔会超时。即使在部署之前回收应用程序池,仍需要很长时间。
此外,它变得更难找到一个时间,当没有人使用该网站,因此更新可以完成而不会影响任何人。
然后“发布”行动开始超时每一次,我不得不切换到手动部署按照这个较早的悬而未决的问题:Visual Studio 2010 - web deploy times out - what to do?
现在手动部署所用的时间越来越长,从5到20分钟。用户数量显着增长,因此部署总是会影响某人(响应时间较慢,超时,站点不可用等)
那么我该怎么做?有没有更好的选择使用Web部署?
编辑:
今天的部署需要18分钟才能发布49个已更改的文件。这种情况很荒谬,是我们现在最大的弱点之一。所以我开始一个体面的大小的奖金,希望解决这个问题。
一些更多的问题,这可能会导致一个解决方案:
- 它为什么会花这么长时间时,只有少数文件已改变?
- 为什么Web部署zip始终包含整个代码库而不仅仅是更改的文件?
- 为什么我不自己手动复制已更改的文件并跳过整个Web部署?但是很难手动确定哪些文件已经改变。我使用SVN - 它是否有办法只输出两个分支之间已更改的文件?
- 还有什么其他问题应该问,但还没有想到呢?
在回答的答案:
回复:http://www.troyhunt.com/2010/11/you-deploying-it-wrong-teamcity_24.html这正是我是怎么做的部署,并且将是一个理想的方法。 Web部署可以正确识别哪些文件已经更改,但是它会超时并且不会发布。解决方案中大约有2500个文件,可能需要很长时间才能确定哪些文件发生了更改?或者可能是发布具有较短的超时值,并且只需上传15mb zip文件即可使用。
我确实完全控制了服务器,它支持Web部署。实际上有两台服务器:主服务器和一台备用服务器,以防万一第一台服务器出现故障。所以任何解决方案都必须易于部署到多台服务器上(网络部署是理想的,直到它停止工作)。
建议为每个版本创建一个新文件夹,然后将IIS更改为指向新文件夹,这听起来像是在发布过程中会降低停机时间/缓慢时间。但这是一个非常手动的过程,我宁愿更自动化的东西。
编辑#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。
什么导致部署增长 - 代码或内容例如图片? – Rob 2011-02-03 11:45:10
代码库相当大,但自从网站首次推出以来,它的规模还没有显着增长,现在它可能会增长10-20%。网络部署zip文件约为15mb。 – 2011-02-04 01:45:12
Web部署需要大约30秒才能进入临时服务器(位于开发盒旁边),但同一部署需要很长时间才能进入实时服务器(托管公司数据中心的VPS)。 – 2011-02-05 00:58:26