我有一个使用CF8和Fusebox 5的站点.无论何时我需要为站点添加新功能,我通常都需要为circuit.xml.cfm添加一个新的保险丝,用于控制器,模型或视图,或者全部.要启用这些新功能/页面,请转到以下网址:
?fusebox.load=true&fusebox.parse=true&fusebox.password=password&fusebox.loadclean=true
最后一个参数是我最近选择的参数,并确定使用它可以启用我的新保险丝; 没有它,新的保险丝不被识别.但是,当我这样做时,删除之前生成的所有解析文件.这不是什么大问题,因为它们在第一次需要时会动态重新生成,但我有一些页面在访问时会返回错误.该错误表示目录未找到,但它们在那里,每次出现都是因为解析文件不存在.
以下是堆栈跟踪的一个错误示例:
Error - Parsed File or Directory not found. Date/Time: Apr 25 2009 12:26:02 Type: fusebox.missingParsedFile Message: Parsed File or Directory not found. Detail: Attempting to execute the parsed file 'login.logout.cfm' threw an error. This can occur if the parsed file does not exist in the parsed directory or if the parsed directory itself is missing. Stack Trace: coldfusion.runtime.CustomException: Parsed File or Directory not found. at coldfusion.tagext.lang.ThrowTag.doStartTag(ThrowTag.java:124) at coldfusion.runtime.CfJspPage._emptyTag(CfJspPage.java:2644) at cffusebox52ecfm1214986498.runPage(C:\example.com\fb5core\fusebox5.cfm:216) at coldfusion.runtime.CfJspPage.invoke(CfJspPage.java:192) at coldfusion.tagext.lang.IncludeTag.doStartTag(IncludeTag.java:366) at coldfusion.runtime.CfJspPage._emptyTag(CfJspPage.java:2644) at cfindex2ecfm584653367.runPage(C:\example.com\index.cfm:3) at coldfusion.runtime.CfJspPage.invoke(CfJspPage.java:192) at coldfusion.tagext.lang.IncludeTag.doStartTag(IncludeTag.java:366) at coldfusion.runtime.CfJspPage._emptyTag(CfJspPage.java:2644) at cfApplication2ecfc1103573364$funcONREQUEST.runFunction(C:\example.com\Application.cfc:36) at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:418) at coldfusion.runtime.UDFMethod$ReturnTypeFilter.invoke(UDFMethod.java:360) at coldfusion.runtime.UDFMethod$ArgumentCollectionFilter.invoke(UDFMethod.java:324) at coldfusion.filter.FunctionAccessFilter.invoke(FunctionAccessFilter.java:56) at coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:277) at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:192) at coldfusion.runtime.TemplateProxy.invoke(TemplateProxy.java:448) at coldfusion.runtime.TemplateProxy.invoke(TemplateProxy.java:308) at coldfusion.runtime.AppEventInvoker.invoke(AppEventInvoker.java:74) at coldfusion.runtime.AppEventInvoker.onRequest(AppEventInvoker.java:243) at coldfusion.filter.ApplicationFilter.invoke(ApplicationFilter.java:269) at coldfusion.filter.RequestMonitorFilter.invoke(RequestMonitorFilter.java:48) at coldfusion.filter.MonitoringFilter.invoke(MonitoringFilter.java:40) at coldfusion.filter.PathFilter.invoke(PathFilter.java:86) at coldfusion.filter.ExceptionFilter.invoke(ExceptionFilter.java:70) at coldfusion.filter.ClientScopePersistenceFilter.invoke(ClientScopePersistenceFilter.java:28) at coldfusion.filter.BrowserFilter.invoke(BrowserFilter.java:38) at coldfusion.filter.NoCacheFilter.invoke(NoCacheFilter.java:46) at coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:38) at coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22) at coldfusion.CfmServlet.service(CfmServlet.java:175) at coldfusion.bootstrap.BootstrapServlet.service(BootstrapServlet.java:89) at jrun.servlet.FilterChain.doFilter(FilterChain.java:86) at coldfusion.monitor.event.MonitoringServletFilter.doFilter(MonitoringServletFilter.java:42) at coldfusion.bootstrap.BootstrapFilter.doFilter(BootstrapFilter.java:46) at jrun.servlet.FilterChain.doFilter(FilterChain.java:94) at jrun.servlet.FilterChain.service(FilterChain.java:101) at jrun.servlet.ServletInvoker.invoke(ServletInvoker.java:106) at jrun.servlet.JRunInvokerChain.invokeNext(JRunInvokerChain.java:42) at jrun.servlet.JRunRequestDispatcher.invoke(JRunRequestDispatcher.java:284) at jrun.servlet.ServletEngineService.dispatch(ServletEngineService.java:543) at jrun.servlet.jrpp.JRunProxyService.invokeRunnable(JRunProxyService.java:203) at jrunx.scheduler.ThreadPool$DownstreamMetrics.invokeRunnable(ThreadPool.java:320) at jrunx.scheduler.ThreadPool$ThreadThrottle.invokeRunnable(ThreadPool.java:428) at jrunx.scheduler.ThreadPool$UpstreamMetrics.invokeRunnable(ThreadPool.java:266) at jrunx.scheduler.WorkerThread.run(WorkerThread.java:66)
我要解决这个问题的方法是转到下面的url,就像前一个url,但没有fusebox.loadclean = true:
?fusebox.password=password&fusebox.load=true&fusebox.parse=true
我尝试做的是在去第一个网址之后,我会去第二个网址,但错误仍然存在.
我正在寻找的是重新加载电路而不产生这些错误的正确方法.我是第三个参与此站点的开发人员,因此前两个可能有不同的配置每个circuit.xml.cfm实例的样式.这些文件用于确定所需内容的应用程序流,附加安全层以及指定某些属性.这是Fusebox方法:
这是Fusebox和ColdFusion方法的混合:
这两种方法都在整个站点中使用,我并不反对使用任何一种方法,但我的目标是减少用户尝试访问特定页面时可能出现的任何错误.我当时认为问题可能是混合的配置方法,我应该坚持使用Fusebox方法,但是我没有找到这个错误的常见趋势.每次页面收到错误时,我们都有错误处理程序给我发电子邮件,所以我想我可以自动调用我的第二个URL并将它们重定向回发生此特定错误时生成错误的页面,但这有无限循环的潜力,并没有解决真正的问题.
我错了吗?我可以在网址中包含哪些属性,这些属性会强制网站识别新的保险丝而不清除我的解析文件?CF本身并不难编码,但我还是比较新的,所以我可以向后看.谢谢!
注意:新的保险丝不需要保险丝盒重新加载 - 只有新的保险丝需要一个.
我不完全确定你所得到的错误是否是我认为的错误,但以下是好的做法,无论......
当您进行更改并需要重新装载保险丝盒时,您应该做的是:
将最新代码部署到同一服务器上的pre-Live"staging"区域.
使用fusebox.parseall=true
和在此区域生成已解析的文件fusebox.loadclean=true
将所有文件从那里复制到您的Live webroot.
fusebox.load=true
在Live网站上执行fusebox - 没有别的(密码除外).
(注意:如有必要,在步骤3之前将您的站点设置为离线/维护模式,然后在步骤4之后将其重新联机)