当使用svn或git更新ColdFusion网站时,有一个时刻会更新一半的repo,而另一半则不会,在此期间可能会发生请求,这可能意味着epic在某些情况下会失败。
因此,当svn / git更新网站源所在的文件夹时,我似乎需要一种暂停请求的方法。在此之后,我可以使用更新的版本号触发应用程序在响应任何请求之前自行更新。
这是一段很短的时间,但根据应用程序可能会导致许多不同的问题。
有没有人有任何有用的建议?
答案 0 :(得分:8)
对于我们的应用程序,我们遵循Adam的建议并从负载均衡器中删除一个节点;但是,对于那些只有一台服务器的人来说,有一个简单的解决方案。
此设置将确保您的新CFML代码不是“实时”,直到您从SCM成功检出代码后清除模板缓存。此外,由于ColdFusion将不再检查.cfc / .cfm文件的更改,因此可以将性能提升高达40%。所有生产服务器都应该在选中此设置的情
答案 1 :(得分:6)
通常,在使用群集时会减轻此类问题。 (但不是使用一个节点的主要原因。)从一个节点中排出所有连接,从群集中删除它,更新它,将其放回群集,删除另一个节点,然后重复,直到所有节点都更新。
您不必全部按顺序执行它们,如果您有多个节点,有很多方法可以执行此操作。但这是一般的想法。
答案 2 :(得分:3)
如果您可以控制Web服务器,则可以将公共请求重新路由到仅包含维护消息的另一个文件夹。否则,您可以使用onRequestStart将所有请求重定向到maintenance.cfm文件。
答案 3 :(得分:1)
这只是一个我不知道是否会奏效的想法。但是,如果您在部署过程开始时将Application.cfc替换为在onRequestStart()方法中具有此功能的新应用程序,该怎么办?
<cffunction name="onRequestStart">
<cfset sleep(5000) />
</cffunction>
然后在部署完成后,再次使用原始文件替换cfc。
您甚至可以通过cfinclude使其更清洁。
<cffunction name="onRequestStart">
<cfinclude template="sleep.cfm" />
</cffunction>
然后,当你不希望sleep()发生时你可以用一个空文件替换sleep.cfm文件