我在日志中遇到问题我无法在浏览器上复制。我每天都会收到数百个
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>
答案 0 :(得分:2)
从评论中推广
您是否尝试使用/cfc
以外的映射名称?像:
<cfset this.mappings['/somethingelse'] = ExpandPath('../cfc')>
这样你就可以这样称呼它:
<cfset Application.udf = createObject("component", "somethingelse.udf").init()>
也许这对我来说只是看起来很奇怪,或者这可能导致你的问题(cfc
是一个保留词或在某种情况下得到特殊处理)。