我遇到了一个似乎只影响我们的生产服务器的问题,没有任何明显的规律或原因。本质上,我们收到以下错误(我将使用虚拟名称来说明这一点):
消息:在组件 Components.services.SomeComponent 中找不到方法 someFunction,在任何实现接口中也没有任何具有此名称的默认方法。
这种情况发生在代码库中的几行不同的地方,但一旦被抛出,它就永远不会再超过该点,直到清除 CFADMIN 中的组件缓存。关键在于:代码中的违规行如下所示:
<cfset var a = createObject("Components.services.app.ComponentA").someFunction() >
似乎createObject对 create ComponentA 的调用返回的是SomeComponent的实例。我尝试过以下方法:
Components.services.app.ComponentA、Components.services.app.ComponentB等等...都是硬编码的new语法而不是createObject./Components/services/app调用(例如)“app”,这样我就可以创建像这样的对象new app.ComponentA()而不是new Components.services.app.ComponentA似乎没有什么帮助——这些在我们的 UAT 或任何人的开发环境中都无法重现,并且在生产中是间歇性的,但是,一旦抛出,服务器就完成了。清除 CFADMIN 中的组件缓存可以暂时修复它,直到几个小时后有人再次随机抛出它。
一些额外的警告:
new ComponentC()是创建someComponent...new ComponentA()而不是创建someOtherComponentsomeComponent, someOtherComponent) 是位于此目录之外的 CFC后续步骤(这些都不理想):
是否有某种方法可以精细地排除从组件缓存中检索某些 CFC,并在调用 …
有什么区别
<cfscript>
i = []
i.push(1)
i = []
i.append(1)
</cfscript>
Run Code Online (Sandbox Code Playgroud)
?
他们似乎都有相同的结果。