Неверное определение компонента

У меня проблема с журналами, которые я не могу воспроизвести в браузере. Я получаю сотни таких в день

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

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 ответ

Повышен из комментариев

Вы пытались использовать имя сопоставления, кроме /cfc? Подобно:

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

так что вы можете назвать это так:

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

Может быть, это выглядит странно для меня или, может быть, это вызывает вашу проблему (cfc быть зарезервированным словом или каким-то образом получать специальное отношение в этом случае).

Другие вопросы по тегам