ColdFusion - 找不到匹配函数[functionName]

时间:2017-12-12 17:14:36

标签: cfml lucee

此代码适用于我的开发环境,但不适用于生产环境。我正在将CFC加载到会话范围中,以防万一。您可以从此转储中看到CFC确实有一个名为getQuestions的函数,但调用它的函数找不到它。我收到了错误

  

“找不到匹配函数[getQuestions]”。

getQuestions是自上次推送以来添加的功能。

我已经检查了dev和prod服务器的服务器配置,它们是相同的,所以我不确定为什么会发生这种情况。如果产生影响,Prod环境就是VM。任何人都可以对这一点有所了解吗?

enter image description here

1 个答案:

答案 0 :(得分:0)

当您实例化一个对象(CFC的一个实例)时,它将保留为该对象,具有该类的版本(.cfc文件),直到它被取消范围并且有资格进行垃圾回收。

您所做的非常简短的版本可能如下所示:

// Write a component
fileWrite("a.cfc", "component { function foo(){return 'bar';} }");

// instantiate that component
a = new a();
writeOutput(a.foo()); // writes "bar" to the page

// now let's rewrite the file
fileWrite("a.cfc", "component { function bar(){return 'foo';} }");

writeOutput(a.foo()); // still writes "bar" to the page
writeOutput(a.bar()); // error - no such method

更改a.cfc的定义并不意味着变量a已更改 - 它仍然是旧版本。

现在,您将Survey对象放在会话范围中。该范围将持续到会话结束 - 由于不活动或服务器需要重新启动而不得不超时。您可以使用structDelete()从会话中删除它或覆盖它(session.survey = new Survey()),但在这些事情发生之前,您的会话仍然会带有旧的调查对象。

对于这样的场景,我倾向于重置会话,因此我可以添加?sessionreset=true并在Application.cfc的OnRequestStart()中放置一些代码来查找并清除我的会话。您还希望为应用程序范围的变量执行此操作。