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

标签 cfml lucee

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

"No matching function [getQuestions] found".


getQuestions是我上次推送后添加的功能。

我已经检查了 dev 和 prod 服务器的服务器配置,它们是相同的,所以我不确定为什么会这样。 Prod 环境是一个虚拟机,如果这会产生影响的话。任何人都可以对此有所了解吗?

enter image description here

最佳答案

当您实例化一个对象(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改变了 - 它仍然是旧版本。

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

对于这样的场景,我倾向于重置 session ,所以我可以添加 ?sessionreset=true并在 Application.cfc 的 OnRequestStart() 中添加一些代码寻找并清除我的 session 。您还需要对应用程序范围的变量执行此操作。

关于cfml - ColdFusion - 找不到匹配的函数 [functionName],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47778084/

相关文章:

html - 如何在 cfscript 内将输出输出到网页?

java - 使用 java 库和 Lucee 将表情符号转换为 html 十六进制

javascript - ColdFusion 表单中的复选框

coldfusion - 我应该把 Jar 文件放在 Lucee 的哪里?

coldfusion - 查找 cffile 上传的源文件路径

java - Java/ColdFusion 和 Lucee 之间的 identityHashCode 区别

coldfusion - 在 ColdFusion 中返回 'nil' 值的替代方法

php - 将 mysql_connect 转换为 cfquery

coldfusion - cflock 不会为在同一浏览器中调用的同一 URL 抛出超时

coldfusion - Lucee Document is empty 错误