Cfwheels 元素插件在 CFML 结构中未定义

Cfwheels Element plugins is undefined in a CFML structure

我遇到一个问题,我收到 "Element Plugins is undefinied" 错误。 我在 Coldfusion 10 上使用 cfwheels v1.3。

问题是它在我使用 coldfusion 11 但具有完全相同的代码库的本地机器上完美运行。

这是我目前得到的错误转储。

错误发生在D:/Websites/nxtgig.involveid.com/wwwroot/ngTesting/wheels/global/public.cfm: line 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.run(SecurityUtil.java:274)
    at org.apache.catalina.security.SecurityUtil.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[=11=]0(ApplicationFilterChain.java:57)
    at org.apache.catalina.core.ApplicationFilterChain.run(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.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.run(SecurityUtil.java:274)
    at org.apache.catalina.security.SecurityUtil.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[=11=]0(ApplicationFilterChain.java:57)
    at org.apache.catalina.core.ApplicationFilterChain.run(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.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.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)

我只是想将我的评论浓缩成一个格式更好的答案。

如果代码库真的相同,那么配置肯定有所不同。保存到数据库的内容不同,或者应用程序正在使用无效数据保持活动状态。

由于错误在这条线上跳闸:

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

我们知道,当 loc.appkeyarguments.name 的值为 plugins 时,其中一个失败。它不是 loc.appkey,所以一定是 arguments.name 导致了错误。

这里的危险信号是它是一个应用程序变量跳闸。应用程序变量从第一次创建应用程序变量开始持续存在,直到服务器重新启动或应用程序过期(达到 applicationTimeout,没有应用程序 activity。每次访问应用程序都会重置计时器)。

此 activity 计时器与应用程序名称相关联。这是为您的应用程序指定唯一名称很重要的众多原因之一。在共享服务器上(尤其是),您永远不想对名称感到乏味,例如 "shoppingcart"。更改应用程序名称并访问网站会再次启动应用程序。之前的申请数据仍然存在,直到它过期之前的任何时限。

由于变量在应用程序范围内,这是跟踪它的位置的最佳线索。设置应用程序变量的事情没有发生。

它可能在您的本地计算机上运行,​​因为嘿,事情发生了,开发箱重新启动,服务重新启动,应用程序闲置,但是 public 服务器获得流量,搜索引擎和客户端访问看看发生了什么变化。如果超时设置为 24 小时,并且有人至少每 23 小时 59 分钟访问一次,则应用程序数据将保持活动状态,直到 server/service/force-restart.

我从一些谷歌搜索中可以看出,cfwheels 嵌套了许多包含(出于正当理由),因此这些功能不直接在 application.cfc 中。您可以在 config/app.cfm 中更改应用程序名称。经过一些谷歌搜索,我觉得这可能是最好的方法。只需在名称中添加任何字符就足够了。

而且,通过谷歌搜索,我发现 Switching environments on CFWheels

在其他应用程序中强制执行此操作的方法(主要是因为我已经输入了)。

你的application.cfc的第一行通常会设置this.name,这是你的应用程序名称。您可以根据需要更改它,下次访问将像系统重启后的第一次访问一样。

另一种方法是像这样将这行代码添加到onRequestStart()

OnRequestStart is the first event handler that is always called in a request. OnApplicationStart is only run when needed and onSessionStart, similiarly, is only run when a session is created.

<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 中包含这些。像这样.. 其中散列是散列密码。在这种情况下,散列是 "mike" 的散列。如果 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>

希望以上内容对您有所帮助。