在ColdFusion集群上重置应用程序范围

时间:2011-02-07 13:09:28

标签: coldfusion coldfusion-9

有没有办法通过onApplicationStart重置应用程序,并确保群集中的所有服务器都重启了它们的应用程序?

例如,在当前代码中,DSN在请求中设置。 我想把它推到应用程序范围,但是如果需要进行更改,我想确保将其传播到集群中的所有服务器,而无需启动和停止CF服务。

2 个答案:

答案 0 :(得分:5)

一个建议是在项目中有一个日期戳记文件,每个服务器都可以读取。

获取CF以在启动时将日期保存到应用程序中,并在每个onRequestStart()中比较它与该文件的对比。

如果日期发生变化,则CF运行该服务器的onApplicationStart()。

我们将这种技术与我们的ANT脚本一起使用,因此当我们部署到每个服务器时,ANT时间戳文件,而下一个人点击我们的应用程序会导致应用程序重置。

干杯, 詹姆斯

答案 1 :(得分:3)

我们已将应用程序设置为通过URL变量重置其范围。因此,您可以使用此类代码通过管理页面中的http重新启动群集中所有服务器上的应用程序:

<cfset serverList = "Server1.domain.com,Server2.domain.com" />
<cfset threadList = "" />
<cfloop list="#serverList#" index="currentServer">
    <cfset threadList = ListAppend(threadList, "thread#currentServer#") />
    <cfthread
        action="run"
        name="thread#currentServer#"
        url="http://#currentServer#?URLToResetScope"
        key="#currentIndex#"
    >
        <cfhttp method="get" url="#Attributes.URL#" result="thread.cfhttp" />
    </cfthread>

</cfloop>
<cfthread action="join" name="#threadList#" timeout="120000" />
<cfloop list="#threadList#" index="currentThread">
    <cfset Results &= currenthThread & ": " & threadresult.cfhttp />
</cfloop>

我们正在做的是获取服务器列表,然后循环遍历该列表,并使用cfthread,将请求传递给每个服务器以重置其自己的范围。然后,我们将所有这些线程连接在一起,并循环遍历它们以获得每个请求的结果。然后我们可以在管理员中显示这些结果,以确保集群中的所有服务器都已正确更新。如果有任何服务器没有正确更新,我们可以单独重置该服务器。