2016-03-02 65 views
2

我在瀏覽器中無法複製的日誌中遇到問題。我每天獲得數百個這樣的數字無效的組件定義

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

您是否嘗試過使用映射名稱而不是'/ cfc'?像''cfset this.mappings ['/ somethingelse'] = ExpandPath('../ cfc')>',這樣你就可以像調用它一樣'。也許它看起來很奇怪... –

+0

我繼續並測試更改映射名稱。現在我必須等待,看看它是否會再次發生,因爲我無法複製它 –

+0

@ Miguel-F:你說得對,它是導致問題的映射的名稱。請提交它作爲答案,以便我可以接受它作爲正確的答案 –

回答

1

您是否嘗試過使用比/cfc以外的映射名稱的意見晉升?像:

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

,這樣你就可以把它想:

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

也許它只是看起來奇怪,我也許是導致您的問題(cfc是保留字,或者以某種方式得到特殊待遇在這種情況下)。

+0

米格爾-F,對不起,我錯了。這不是問題。我認爲這是因爲我停止收到錯誤消息,但是我停止收到錯誤的原因是因爲我搞砸了,並且在該請求啓動方法中發送了一個cfabort的application.cfc副本。哎呀。 20分鐘後,我收到客戶的憤怒電話。現在,我得到無效的組件定義,無法找到組件[somethingelse.udf]。我將嘗試在錯誤日誌中放置應用程序的cfdump。 –

+0

對不起。請張貼您的解決方案以避免混淆。 –