我目前使用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