2011-09-23 55 views
2

更新ColdFusion網站時,使用svn或git時,有一半時間回購更新,另一半不更新,在此期間可能會發生請求,這可能意味着史詩失敗在某些情況下。無故障ColdFusion應用程序更新過程

因此,似乎我需要一種暫停svn/git更新網站源代碼所在的文件夾的請求。之後,我可以有一個更新的版本號碼觸發應用程序在響應任何請求之前更新自己。

這是一個很短的時間,但可能會導致許多不同的問題,取決於應用程序。

有沒有人有任何有用的建議?

回答

8

對於我們的應用程序,我們遵循Adam的建議並從負載平衡器中移除一個節點;然而,對於只有一臺服務器的人來說,這是一個簡單的解決方案。

  1. 登錄到左側邊欄
  2. 在ColdFusion管理
  3. 點擊「高速緩存」保證「可信的高速緩衝」設置被選中。
  4. 展望未來,完成代碼簽出後,您將使用CFAdmin API或使用Adobe Air ColdFusion服務器管理器應用程序在「緩存」頁面上實現「清除模板緩存」。

此設置將確保您的新CFML代碼不是「活的」,除非您在從SCM成功完成代碼簽出後清除模板緩存。此外,由於ColdFusion將不再檢查您的.cfc/.cfm文件以進行更改,因此可以將性能提高多達40%。所有生產服務器都應在檢查此設置的情況下運行

+1

需要注意的是,如果觸發onApplicationStart(或等效)的東西,您需要清除模板緩存_before_調用它(或舊版本將運行)。但是,如果您的應用程序啓動生成CFML文件(例如,框架解析的文件或類似文件),那麼您*還需要再次調用清除模板緩存_after_這些文件生成。 –

+1

這正是我們如何在我們的系統上完成的。 –

+0

感謝您的提示!它聽起來並不完美,因爲每個cfc/cfm文件都不能保證在緩存中,或者我錯了? – ztatic

1

這只是一個想法,我不知道它是否會起作用。但是如果你在部署過程開始時用一個新的onRequestStart()方法取代了你的Application.cfc呢?

<cffunction name="onRequestStart"> 
     <cfset sleep(5000) /> 
</cffunction> 

然後,當部署完成後,再次將cfc替換爲原始。

你甚至可以用cfinclude使它更乾淨。

<cffunction name="onRequestStart"> 
     <cfinclude template="sleep.cfm" /> 
</cffunction> 

然後,你可以只用一個空文件替換sleep.cfm文件時,你不想睡眠()發生

6

通常,當您使用羣集這類問題的緩解。 (但不是使用其中一個的主要原因。)您從一個節點中排除所有連接,將其從集羣中刪除,更新它,將其放回集羣,刪除另一個節點,然後重複,直到更新所有節點。

您不必全部串聯,如果您有多個節點,有很多方法可以做到這一點。但這是一般的想法。

3

如果您擁有對Web服務器的控制權,那麼您可以將公共請求重新路由到另一個僅包含維護消息的文件夾。否則,您可以使用onRequestStart將所有請求重定向到maintenance.cfm文件。

+0

但是維護文件如何知道git/svn更新完全完成? – ztatic

+0

它不會,你不得不手動將其切換回來,或讓一些構建過程來管理它。 –