此代码适用于我的开发环境,但不适用于生产环境。我正在将CFC加载到会话范围中,以防万一。您可以从此转储中看到CFC确实有一个名为getQuestions
的函数,但调用它的函数找不到它。我收到了错误
“找不到匹配函数[getQuestions]”。
getQuestions
是自上次推送以来添加的功能。
我已经检查了dev和prod服务器的服务器配置,它们是相同的,所以我不确定为什么会发生这种情况。如果产生影响,Prod环境就是VM。任何人都可以对这一点有所了解吗?
答案 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()
中放置一些代码来查找并清除我的会话。您还希望为应用程序范围的变量执行此操作。