我设置了一个带有多层目录结构的CF9项目。在根级别,我有一个带有Application.cfc的实时生产站点。它包含许多绑定到'debugMode'标志的变量 - 因此对于生产站点,此标志设置为false。
在生产站点的子目录中,我有一个包含该站点测试版本的文件夹。它有自己的Application.cfc,debugMode设置为true。除了这个标志和我们正在测试的更改,它与生产Application.cfc相同。
这个UNTIL没有任何问题我们添加了重置Application.cfc的逻辑,以便在不等待超时(我们设置为30分钟)的情况下查看我们的更改。
为实现这一目标,我们将此块添加到Application.cfc中的“OnRequestStart”函数中(它出现在生产版和测试版上):
<cfif StructKeyExists( URL, "reset" )>
<!--- Reset application and session. --->
<cfset THIS.OnApplicationStart() />
<cfset THIS.OnSessionStart() />
</cfif>
这最初似乎工作正常。如果我们在测试版本的任何页面的url中添加'?reset',则会立即反映Application.cfc所做的更改,但我们很快发现了一个令人讨厌的副作用:在测试版本上调用reset也会改变我们的生产站点以使用测试Application.cfc的版本,从而大大地满足一切。
在生产站点上运行'?reset'逻辑修复了此问题,但随后导致所有测试页使用生产Application.cfc而不是测试版。等待Application.cfcs超时并自动刷新没有任何区别,所以现在我们的测试环境搞砸了。
任何对正在发生的事情或做什么的见解都会非常感激,因为我们相当难过。这只是一个糟糕的建筑吗?我们继承了它,现在已经习惯了这种结构,所以快速修复是首选,但我愿意接受建议。
感谢。
答案 0 :(得分:6)
问题很可能是两个application.cfc文件指定了相同的应用程序名称。
因此,它们本质上是相同的应用程序。
因此,无论是从“测试”站点还是“实时”站点触发刷新,它都会重置相同的应用程序,然后从您发出重置的任何版本重新实例化变量。
您需要将“Test”应用程序的应用程序名称设置为与实时应用程序不同的内容。
对于测试:
<!--- For the "Test" Application --->
<cfset this.name = "TESTApplication">
直播:
<!--- For the "Live" Application --->
<cfset this.name = "Application">