无效的组件定义

Invalid Component Definition

我在无法在浏览器上复制的日志中遇到问题。我每天收到数百个这样的东西

invalid component definition, can't find component [cfc.udf]

cfc 存储在应用程序上一级的 cfc 文件夹中。这样许多应用程序就可以使用相同的 cfc。

文件夹结构:

---- cfc
--------- udf.cfc
---- myApp
--------- application.cfc

在 application.cfc 中,我正在使用特定于应用程序的映射,因为这是在生产中的许多不同负载平衡服务器以及 QA 环境和本地测试环境中设置的,并保留它们全部同步将很困难。

在 onRequestStart 中,我有一个每 5 分钟重新启动应用程序的功能。它是由一位顾问提供的。我怀疑这是罪魁祸首,因为日志显示这些错误恰好以 5 分钟的间隔出现

<cfcomponent> 
    <cfset This.name = "myApp">
    <cfset This.Sessionmanagement=true>
    <cfset This.Sessiontimeout="#createtimespan(0,0,30,0)#">
    <cfset this.mappings['/cfc'] = ExpandPath('../cfc')>
    <cffunction name="onApplicationStart">
        <cfset Application.udf = createObject("component", "cfc.udf").init()>
    </cffunction>
    <cffunction name="onRequestStart">
        <cfset appRefreshMinutes = 5>
        <cfif Not IsDefined("Application.refreshTime")>
            <cfset currentMinute = Minute(Now())>
            <cfset Application.refreshTime = DateAdd("n", -(currentMinute MOD appRefreshMinutes)+appRefreshMinutes, Now())>
            <cfset Application.refreshTime = DateAdd("s", -(Second(Application.refreshTime)), Application.refreshTime)>
        </cfif>
        <cfif Now() GTE Application.refreshTime Or IsDefined("URL.reload")>
            <cflock name="ApplicationInit" type="exclusive" timeout="5" throwontimeout="false">
                <cfif Now() GTE Application.refreshTime Or IsDefined("URL.reload")>
                    <cfset OnApplicationStart()>
                    <cfset Application.refreshTime = DateAdd("n", appRefreshMinutes, Application.refreshTime)>
                </cfif>
            </cflock>
        </cfif>
    </cffunction>
</cfcomponent>

来自评论

您是否尝试过使用 /cfc 以外的映射名称?喜欢:

<cfset this.mappings['/somethingelse'] = ExpandPath('../cfc')>

这样您就可以这样称呼它:

<cfset Application.udf = createObject("component", "somethingelse.udf").init()>

也许它对我来说看起来很奇怪,或者这可能导致您的问题(cfc 是一个保留字或在这种情况下以某种方式得到特殊处理)。