【问题标题】:Wrong Application.cfc being referenced by test site in subdirectory of main site测试站点在主站点的子目录中引用了错误的 Application.cfc
【发布时间】:2010-09-10 18:50:54
【问题描述】:

我有一个设置了多层目录结构的 CF9 项目。在根级别,我拥有带有 Application.cfc 的实时生产站点。它包含许多绑定到“debugMode”标志的变量——所以在生产站点的情况下,这个标志设置为 false。

在生产站点的子目录中,我有一个文件夹,其中包含该站点的测试版本。这有自己的 Application.cfc,其中 debugMode 设置为 true。除了我们正在测试的这个标志和更改之外,它与生产 Application.cfc 相同。

这个没有任何问题,直到我们添加了重置 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 ALSO 会更改我们的生产站点以使用Application.cfc 的测试版本,从而使一切变得强大。

在生产站点上运行“?reset”逻辑解决了这个问题,但随后导致所有测试页面使用生产 Application.cfc 而不是测试版本。等待 Application.cfcs 超时并自动刷新没有任何区别,所以现在我们的测试环境搞砸了。

任何对正在发生的事情或做什么的见解将不胜感激,因为我们相当难过。这仅仅是一个糟糕的架构吗?我们继承了它,现在已经习惯了这种结构,所以最好快速修复,但我愿意接受建议。

谢谢。

【问题讨论】:

    标签: coldfusion application.cfc


    【解决方案1】:

    问题很可能是两个 application.cfc 文件指定了相同的应用程序名称。

    所以,它们本质上是同一个应用程序。

    因此,无论您是从“测试”站点还是“实时”站点触发刷新,它都会重置同一个应用程序,然后从您发出重置的任何版本重新实例化变量。

    您需要将“测试”应用程序的应用程序名称设置为不同于实时应用程序的名称。

    测试:

    <!--- For the "Test" Application --->
    <cfset this.name = "TESTApplication">
    

    直播:

    <!--- For the "Live" Application --->
    <cfset this.name = "Application">
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-17
      • 2014-03-25
      • 2014-03-25
      • 1970-01-01
      • 1970-01-01
      • 2014-04-28
      • 2017-05-06
      • 2011-02-03
      相关资源
      最近更新 更多