缺少 ColdFusion 变量
ColdFusion variables missing
好的,我使用 ColdFusion 已经 20 年了,但从未见过这个。我有一个 ContentBox 站点(不认为这会影响问题,但想包含信息),我在其中拉取了前端网页,并且后端代码通过事件网关 运行。我每分钟收到大约 30 个网关事件。我的问题是,当前端网页为 运行(通常是从数据库中提取数据)时,我的变量在例程中消失了。
因为 ContenBox/ColdBox 模块目录 Application.cfcs 包含中止命令,网关事件 cfc 位于应用程序根目录下的子文件夹中(因为网关 cfc 中的任何中止,或其 Application.cfc,导致网关错误)。
代码中的错误点不断变化。有时是结构键不存在,而循环遍历结构的键:
for(var structKey in structureName)
{
var structValue = structureName[structKey];
}
其他时候,代码引用了应用程序范围内的结构,同样,几行前存在的键现在丢失并引发错误。因此,在处理网页时,各种变量范围(变量、应用程序等)似乎正在丢失它们的值(这在处理网关事件时经常发生)。
Web 服务器受到严格保护,我没有 dev/staging 中不安全的问题。所以我的直觉当然是安全方面的某些东西导致了这个问题。我在日志中没有看到任何可以指出问题的内容。
由于合同义务,我不能post此处的代码。话虽如此,我认为该描述本身表明问题不在于 CF 代码,而在于服务器的强化。
有没有人知道什么样的事情会导致 CF 应用程序在中途丢失变量?
问题已解决。虽然竞争条件听起来很合理,但我不明白它是如何在单个线程的如此简洁的循环中发生的。但这确实是一种竞争条件。问题源于代码位于 ColdBox 处理程序中这一事实。在这种情况下,我误解了 Wirebox 的用法。我认为调用处理程序将创建处理程序的缓存单例的单个实例。相反,所有调用都使用 相同的实例 !这意味着处理程序的每次调用都与其他并发调用共享变量范围,而不仅仅是它自己。这就是变量被覆盖的方式。
20 年的 ColdFusion,但第一个项目是 ColdBox 和 ContentBox。这就是生活。
好的,我使用 ColdFusion 已经 20 年了,但从未见过这个。我有一个 ContentBox 站点(不认为这会影响问题,但想包含信息),我在其中拉取了前端网页,并且后端代码通过事件网关 运行。我每分钟收到大约 30 个网关事件。我的问题是,当前端网页为 运行(通常是从数据库中提取数据)时,我的变量在例程中消失了。
因为 ContenBox/ColdBox 模块目录 Application.cfcs 包含中止命令,网关事件 cfc 位于应用程序根目录下的子文件夹中(因为网关 cfc 中的任何中止,或其 Application.cfc,导致网关错误)。
代码中的错误点不断变化。有时是结构键不存在,而循环遍历结构的键:
for(var structKey in structureName)
{
var structValue = structureName[structKey];
}
其他时候,代码引用了应用程序范围内的结构,同样,几行前存在的键现在丢失并引发错误。因此,在处理网页时,各种变量范围(变量、应用程序等)似乎正在丢失它们的值(这在处理网关事件时经常发生)。
Web 服务器受到严格保护,我没有 dev/staging 中不安全的问题。所以我的直觉当然是安全方面的某些东西导致了这个问题。我在日志中没有看到任何可以指出问题的内容。
由于合同义务,我不能post此处的代码。话虽如此,我认为该描述本身表明问题不在于 CF 代码,而在于服务器的强化。
有没有人知道什么样的事情会导致 CF 应用程序在中途丢失变量?
问题已解决。虽然竞争条件听起来很合理,但我不明白它是如何在单个线程的如此简洁的循环中发生的。但这确实是一种竞争条件。问题源于代码位于 ColdBox 处理程序中这一事实。在这种情况下,我误解了 Wirebox 的用法。我认为调用处理程序将创建处理程序的缓存单例的单个实例。相反,所有调用都使用 相同的实例 !这意味着处理程序的每次调用都与其他并发调用共享变量范围,而不仅仅是它自己。这就是变量被覆盖的方式。
20 年的 ColdFusion,但第一个项目是 ColdBox 和 ContentBox。这就是生活。