有没有办法通过 onApplicationStart 重置应用程序,并确保集群中的所有服务器都重新启动了它们的应用程序?
例如,在当前代码中,DSN 是在 request 中设置的。我想将其推送到应用程序范围,但如果需要进行更改,我想确保将其传播到集群中的所有服务器,而无需启动和停止 CF 服务。
有没有办法通过 onApplicationStart 重置应用程序,并确保集群中的所有服务器都重新启动了它们的应用程序?
例如,在当前代码中,DSN 是在 request 中设置的。我想将其推送到应用程序范围,但如果需要进行更改,我想确保将其传播到集群中的所有服务器,而无需启动和停止 CF 服务。
一个建议是在您的项目中拥有一个每个服务器都可以读取的带日期戳的文件。
获取 CF 以在启动时将日期保存到应用程序中,并将其与每个 onRequestStart() 中的该文件进行比较。
如果日期发生变化,则 CF 运行该服务器的 onApplicationStart()。
我们在 ANT 脚本中使用该技术,因此当我们部署到每个服务器时,ANT 会为文件添加时间戳,并且下一个点击我们的应用程序的人会导致应用程序重置。
干杯,詹姆斯
我们将应用程序设置为通过 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 向每个服务器传递一个请求以重置其自己的范围。然后,我们将所有这些线程连接在一起,并遍历它们以获得每个请求的结果。然后我们可以在管理员中显示这些结果,以确保集群中的所有服务器都正确更新。如果有任何服务器没有正确更新,我们可以单独重置该服务器。
担