Плагины Cfwheels Element не определены в структуре CFML

У меня возникла проблема, из-за которой я получаю сообщение об ошибке «Плагины элементов не определены». Я использую cfwheels v1.3 на Coldfusion 10.

Дело в том, что он отлично работает на моей локальной машине, использующей coldfusion 11, но с точно такой же кодовой базой.

Это дамп ошибки, который я сейчас получаю.

Ошибка произошла в D:/Websites/nxtgig.involveid.com/wwwroot/ngTesting/wheels/global/public.cfm: строка 363, вызываемая из D:/Websites/nxtgig.involveid.com/wwwroot/ngTesting/wheels. /events/onrequestend/debug.cfm: строка 130 Вызывается с D:/Websites/nxtgig.involveid.com/wwwroot/ngTesting/wheels/global/cfml.cfm: строка 117 Вызывается с D:/Websites/nxtgig.involveid.com /wwwroot/ngTesting/wheels/events/onrequestend.cfm: строка 7

361 :       else
362 :       {
363 :           loc.returnValue = application[loc.appKey][arguments.name];
364 :       }
365 :   </cfscript>

Вы можете увидеть ошибку здесь, так как она расположена внизу страницы. http://gig.nxt.link/ngtesting/index.cfm?controller=authenticate&action=login

Весь дамп ошибок

coldfusion.runtime.UndefinedElementException: Element plugins is undefined in a CFML structure referenced as part of an expression.
    at coldfusion.runtime.CfJspPage.ArrayGetAt(CfJspPage.java:974)
    at coldfusion.runtime.CfJspPage._arrayGetAt(CfJspPage.java:985)
    at coldfusion.runtime.CfJspPage._arrayGetAt(CfJspPage.java:980)
    at coldfusion.runtime.CfJspPage._arrayGetAt(CfJspPage.java:690)
    at coldfusion.runtime.CfJspPage._arrayGetAt(CfJspPage.java:672)
    at coldfusion.runtime.CfJspPage._arrayGetAt(CfJspPage.java:637)
    at coldfusion.runtime.CfJspPage._arrayGetAt(CfJspPage.java:624)
    at cfpublic2ecfm882042214$funcGET.runFunction(D:\Websites\nxtgig.involveid.com\wwwroot\ngTesting\wheels\global\public.cfm:363)
    at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:472)
    at coldfusion.filter.SilentFilter.invoke(SilentFilter.java:47)
    at coldfusion.runtime.UDFMethod$ReturnTypeFilter.invoke(UDFMethod.java:405)
    at coldfusion.runtime.UDFMethod$ArgumentCollectionFilter.invoke(UDFMethod.java:368)
    at coldfusion.filter.FunctionAccessFilter.invoke(FunctionAccessFilter.java:55)
    at coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:321)
    at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:220)
    at coldfusion.runtime.CfJspPage._invokeUDF(CfJspPage.java:2659)
    at cfdebug2ecfm1977824709.runPage(D:\Websites\nxtgig.involveid.com\wwwroot\ngTesting\wheels\events\onrequestend\debug.cfm:130)
    at coldfusion.runtime.CfJspPage.invoke(CfJspPage.java:244)
    at coldfusion.tagext.lang.IncludeTag.doStartTag(IncludeTag.java:444)
    at coldfusion.runtime.CfJspPage._emptyTcfTag(CfJspPage.java:2799)
    at cfcfml2ecfm1611265968$func$INCLUDEANDOUTPUT.runFunction(D:\Websites\nxtgig.involveid.com\wwwroot\ngTesting\wheels\global\cfml.cfm:117)
    at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:472)
    at coldfusion.runtime.UDFMethod$ReturnTypeFilter.invoke(UDFMethod.java:405)
    at coldfusion.runtime.UDFMethod$ArgumentCollectionFilter.invoke(UDFMethod.java:368)
    at coldfusion.filter.FunctionAccessFilter.invoke(FunctionAccessFilter.java:55)
    at coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:321)
    at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:518)
    at coldfusion.runtime.CfJspPage._invokeUDF(CfJspPage.java:2624)
    at cfonrequestend2ecfm279799770$funcONREQUESTEND.runFunction(D:\Websites\nxtgig.involveid.com\wwwroot\ngTesting\wheels\events\onrequestend.cfm:7)
    at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:472)
    at coldfusion.runtime.UDFMethod$ReturnTypeFilter.invoke(UDFMethod.java:405)
    at coldfusion.runtime.UDFMethod$ArgumentCollectionFilter.invoke(UDFMethod.java:368)
    at coldfusion.filter.FunctionAccessFilter.invoke(FunctionAccessFilter.java:55)
    at coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:321)
    at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:220)
    at coldfusion.runtime.TemplateProxy.invoke(TemplateProxy.java:655)
    at coldfusion.runtime.TemplateProxy.invoke(TemplateProxy.java:444)
    at coldfusion.runtime.TemplateProxy.invoke(TemplateProxy.java:414)
    at coldfusion.runtime.AppEventInvoker.invoke(AppEventInvoker.java:108)
    at coldfusion.runtime.AppEventInvoker.onRequestEnd(AppEventInvoker.java:343)
    at coldfusion.filter.ApplicationFilter.invoke(ApplicationFilter.java:445)
    at coldfusion.filter.RequestMonitorFilter.invoke(RequestMonitorFilter.java:48)
    at coldfusion.filter.MonitoringFilter.invoke(MonitoringFilter.java:40)
    at coldfusion.filter.PathFilter.invoke(PathFilter.java:112)
    at coldfusion.filter.ExceptionFilter.invoke(ExceptionFilter.java:94)
    at coldfusion.filter.BrowserDebugFilter.invoke(BrowserDebugFilter.java:79)
    at coldfusion.filter.ClientScopePersistenceFilter.invoke(ClientScopePersistenceFilter.java:28)
    at coldfusion.filter.BrowserFilter.invoke(BrowserFilter.java:38)
    at coldfusion.filter.NoCacheFilter.invoke(NoCacheFilter.java:58)
    at coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:38)
    at coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22)
    at coldfusion.filter.CachingFilter.invoke(CachingFilter.java:62)
    at coldfusion.CfmServlet.service(CfmServlet.java:219)
    at coldfusion.bootstrap.BootstrapServlet.service(BootstrapServlet.java:89)
    at sun.reflect.GeneratedMethodAccessor94.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:274)
    at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:271)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
    at org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:306)
    at org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:166)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:299)
    at org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:57)
    at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:189)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at coldfusion.monitor.event.MonitoringServletFilter.doFilter(MonitoringServletFilter.java:42)
    at coldfusion.bootstrap.BootstrapFilter.doFilter(BootstrapFilter.java:46)
    at sun.reflect.GeneratedMethodAccessor93.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:274)
    at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:271)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
    at org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:306)
    at org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:246)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
    at org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:57)
    at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:189)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at sun.reflect.GeneratedMethodAccessor5714.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.intergral.fusionreactor.j2ee.filterchain.WrappedFilterChain.doFilter(WrappedFilterChain.java:97)
    at com.intergral.fusionreactor.j2ee.filter.FusionReactorRequestHandler.doNext(FusionReactorRequestHandler.java:472)
    at com.intergral.fusionreactor.j2ee.filter.FusionReactorRequestHandler.doHttpServletRequest(FusionReactorRequestHandler.java:312)
    at com.intergral.fusionreactor.j2ee.filter.FusionReactorRequestHandler.doFusionRequest(FusionReactorRequestHandler.java:192)
    at com.intergral.fusionreactor.j2ee.filter.FusionReactorRequestHandler.handle(FusionReactorRequestHandler.java:507)
    at com.intergral.fusionreactor.j2ee.filter.FusionReactorCoreFilter.doFilter(FusionReactorCoreFilter.java:36)
    at sun.reflect.GeneratedMethodAccessor5713.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.intergral.fusionreactor.j2ee.filterchain.WrappedFilterChain.doFilter(WrappedFilterChain.java:79)
    at sun.reflect.GeneratedMethodAccessor5712.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.intergral.fusionreactor.agent.filter.FusionReactorStaticFilter.doFilter(FusionReactorStaticFilter.java:53)
    at com.intergral.fusionreactor.agent.pointcuts.NewFilterChainPointCut$1.invoke(NewFilterChainPointCut.java:41)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:414)
    at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:204)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:539)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:298)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)

person matthew    schedule 12.02.2015    source источник
comment
Похоже, что-то отличается между вашей локальной конфигурацией приложения и удаленной конфигурацией. Пробовали ли вы вручную запускать OnApplicationStart() или переименовывать приложение (this.name)?   -  person Regular Jo    schedule 12.02.2015
comment
Это не дает нам многого. Вам нужно показать нам часть кода, где возникает ошибка.   -  person Tushar Bhaware    schedule 12.02.2015
comment
Извините, что не предоставил дамп ошибок, я исправил фрагмент, чтобы проиллюстрировать суть. @cfqueryparam, что мне делать, чтобы вручную вызвать onApplicationStart(), и как это может помочь в этой ситуации?   -  person matthew    schedule 13.02.2015
comment
@matthew Прежде чем я посмотрю на ваш пост, потому что он полезен для дальнейшего использования. Вы можете добавить onApplicationStart() в первую строку onRequestStart() после аргументов в cfscript application.cfc. Если вы пишете в тегах, а не в скрипте, просто <cfset onApplicationStart()> в первую строку функции после аргументов. Причина, по которой это может помочь, заключается в том, что вы, возможно, изменили что-то в конфигурации вашего приложения, что не отражается, потому что onApplicationStart() запускается только при первом доступе после перезапуска сервера или при первом доступе после истечения срока действия Application (applicationtimeout).   -  person Regular Jo    schedule 13.02.2015
comment
@matthew После просмотра обновленной ошибки это та же ошибка, что и на сайте, на который вы ссылаетесь (конечно). Somewhere application[*loc.appkey*]["plugins"] должен был быть определен, но не был определен. Интересно, что он работает локально, а не на удаленном сервере. Если кодовая база действительно идентична, должна быть разница в конфигурации, как я уже говорил. onApplicationStart() (или вложенные функции, которые он вызывает) было бы моим лучшим предположением.   -  person Regular Jo    schedule 13.02.2015


Ответы (1)


Я просто собираюсь объединить свои комментарии в лучше отформатированный ответ.

Если кодовые базы действительно идентичны, конфигурация должна каким-то образом отличаться. Либо что-то, сохраненное в базе данных, отличается, либо приложение поддерживается с неверными данными.

Поскольку ошибка срабатывает в этой строке:

363 :    loc.returnValue = application[loc.appKey][arguments.name];

Мы знаем, что либо loc.appkey, либо arguments.name терпят неудачу, когда у одного есть значение plugins. Это не loc.appkey, поэтому ошибка должна быть arguments.name.

Красный флаг здесь заключается в том, что это срабатывание переменной приложения. Переменные приложения сохраняются с момента первого создания переменной приложения до тех пор, пока либо сервер не будет перезапущен, либо пока не истечет срок действия приложения (достигнуто applicationTimeout без активности приложения. Каждый доступ к приложению сбрасывает таймер).

Этот таймер активности привязан к имени приложения. Это одна из многих причин, почему важно давать вашим приложениям уникальные имена. На общем сервере (особенно) вы никогда не захотите быть мягким с именами, такими как «корзина». Изменение имени приложения и доступ к веб-сайту запускает приложение снова. Прежние данные приложения все еще существуют до тех пор, пока не истечет срок их действия.

Поскольку переменная находится в области действия приложения, это лучший ключ к тому, где ее отслеживать. Что-то, устанавливающее переменную приложения, не происходит.

Может случиться так, что он работает на вашем локальном компьютере, потому что, эй, вещи случаются, блоки разработки перезапускаются, службы перезапускаются, приложения остаются бездействующими, однако общедоступные серверы получают трафик, а поисковые системы и клиенты посещают, чтобы посмотреть, что изменилось. Если тайм-аут установлен на 24 часа и человек посещает сайт не реже одного раза каждые 23 часа и 59 минут, данные приложения будут оставаться в силе до тех пор, пока сервер/служба/принудительно не перезапустится.

Погуглив, я вижу, что в cfwheels много включений (по уважительным причинам), поэтому эти функции не находятся непосредственно в application.cfc. Вы можете изменить имя приложения в config/app.cfm. После некоторого поиска в Google я чувствую, что это может быть лучшим подходом. Простого добавления любого символа к имени должно быть достаточно.

Но также, погуглив, я нашел переключение сред на CFWheels

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

Одна из первых строк вашего application.cfc обычно содержит this.name, это имя вашего приложения. Вы можете изменить его, если хотите, и следующее посещение будет похоже на первое посещение после перезагрузки системы.

Другой способ — добавить эту строку кода в onRequestStart() вот так

OnRequestStart — это первый обработчик событий, который всегда вызывается в запросе. OnApplicationStart запускается только при необходимости, а onSessionStart аналогично запускается только при создании сеанса.

<cffunction name="onRequestStart">  
  <cfargument name="requestname" required=true/>
  <cfset structClear(Application)>
  <cfset structClear(Session)>
  <cfset onApplicationStart()>
  <cfset onSessionStart()>
  ...
</cffunction>

или, для синтаксиса cfscript.

function onRequestStart(requestname) {
  structClear(Application);
  structClear(session);
  onApplicationStart();
  onSessionStart();
  ...
}

Вы также можете содержать их в if. Вот так... где хэш - это хешированный пароль. В данном случае хеш — это хеш от «майк». Если к URL-адресу добавлено ?rextart&rexpw=mike, он сработает. (Вы должны выбрать свою собственную хеш-строку.)

<cffunction name="onRequestStart">  
  <cfargument name="requestname" required=true/>
  <cfif isDefined("url.rextart") and isDefined("url.rexpw")
        and hash(url.rexpw) is "18126E7BD3F84B3F3E4DF094DEF5B7DE">
      <cfset structClear(Application)>
      <cfset structClear(Session)>
      <cfset onApplicationStart()>
  </cfif>
</cffunction>

Я надеюсь, что все это поможет вам.

person Regular Jo    schedule 13.02.2015
comment
Спасибо за этот очень подробный ответ. Я полагаю, что, как вы сказали, приложение поддерживается неверными данными. Оказывается, сервер был настроен в жесткой песочнице, что вызывало проблему с перезапуском приложения. - person matthew; 13.03.2015