无效的组件定义

时间:2016-03-02 19:54:14

标签: coldfusion mapping cfc

我在日志中遇到问题我无法在浏览器上复制。我每天都会收到数百个

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>

1 个答案:

答案 0 :(得分:2)

从评论中推广

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

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

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

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

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