我支持传统的Cold Fusion系统,我不明白为什么我会时不时地出现以下错误:
元素ROOT.DSN在APPLICATION中未定义。
错误似乎出现在随机的地方,对我来说没有意义。如果我了解冷融合的工作原理-每个请求都首先处理Application.cfm
,对吧?
我们有:
if (not isDefined('Application.Root'))
include '/lib/config/CreateRoot.cfm';
CreateRoot进行一些初始化,设置ROOT.DSN就是其中之一。
这对我来说没有任何意义,因为通常调用者也会从数据库中加载一些东西,所以为什么一个函数可以";参见";当我们进入另一个时,这个就不见了?它不是ROOT.DSN,但有时其他设置,我们以相同的方式初始化。
重试通常是成功的,所以我能得到的唯一解释是,当这种情况发生时,服务器正在运行一些垃圾收集器并清理一些内存。
我的问题是:
- 为什么会发生这种情况,为什么/何时会丢失应用程序变量
- 如何预防
使用正确的作用域是防止这些问题的重要因素。请使用";application.root.ds";以确保您确实调用了正确的作用域。只有在执行以下操作时,应用程序变量才会重置:
- 重新启动应用程序
- 重命名应用程序
- 重新启动机器,这本身也会重新启动服务器上的应用程序
- 手动重置应用程序范围
除此之外,一旦应用程序第一次运行,您应该始终能够访问它,并且它不应该重新启动。