2011-05-08 117 views
1

目前,在application.cfc中,我扩展了Fusebox 5.5框架。 然后在下面的OnRequestStart方法中,我根据一定的条件设置保险丝盒模式。保险丝盒不解析xml文件

问题是,有时,fusebox xml文件不会重新解析,无论我做出什么改变。如果我使用url变量强制重新分析fusebox.parse = true & fusebox.loadclean = true & fusebox.password = xxx然后文件再次解析。

这几乎就像保险丝盒仍然在生产模式下,即使当我放弃它说FUSEBOX_PARAMETERS.mode“以发展为满负荷”

可能是什么造成的?在下面的代码中,保险丝模式的操作方式是正确的,还是应该在其他地方进行这种设置(除了fusebox.xml)。

任何帮助将是伟大的。 感谢

<cffunction name="onRequestStart"> 
    <cfset variables.server_type = "Development" /> 

    <cfswitch expression="#variables.server_type#"> 
     <cfcase value="development"> 
      <cfset FUSEBOX_PARAMETERS.mode = "development-circuit-load" /> 
      <cfset FUSEBOX_PARAMETERS.debug = true /> 
      <cfset request.component_reload = true /> 
     </cfcase> 
     <cfdefaultcase> 
      <cfset FUSEBOX_PARAMETERS.mode = "production" /> 
      <cfset FUSEBOX_PARAMETERS.debug = false /> 
      <cfset request.component_reload = false /> 
     </cfdefaultcase> 
    </cfswitch> 
    <cfif (StructKeyExists(attributes, "fusebox.loadapp") AND attributes.fusebox.password EQ application.fusebox.password) OR FUSEBOX_PARAMETERS.mode NEQ application.fusebox.mode> 
     <cfset this.onApplicationStart() /> 
    </cfif> 

    <cfset superReturn = super.onRequestStart(arguments.1) /> 
</cffunction> 

回答

3

见,FUSEBOX_PARAMETERS存储在application范围,默认情况下它们都包含在巨大的容器application.fusebox。当super.onApplicationStart()被调用时,保险丝盒设置被填充,因此在onRequestStart中修改它们是没有意义的。

我建议将您的cfswitch代码移动到您定义应用程序设置的组件主体中。

onRequestStart您可以强制重启应用重读的设置,可能是这样的:

<cfif StructKeyExists(attributes, "fusebox.loadapp") AND attributes["fusebox.password"] EQ application.fusebox.password> 
    <cfset this.onApplicationStart()/
</cfif> 

请注意,fusebox.loadapp没有内置保险丝盒属性,它只会工作,为您的应用程序,只需为方便起见,像其他人一样加前缀。这样你可以重读你的应用程序的单例。

+0

感谢您的回复 - 我怀疑它与应用范围有关。 因此,如果我在调用之前将代码放入onApplicationStart方法中, – Cheeky 2011-05-08 13:26:59

+0

@ Cheeky,你的意思是把你的代码,对吧?我认为''may'也可以在'onApplicationStart'上工作,但是你至少需要做两件事:(1)在那之后执行'super.onApplicationStart()'; (2)以某种方式强制应用程序重新启动,除非它在超时之前不会被触发。另外,我不认为'FUSEBOX_PARAMETERS'会在'onApplicationStart'里面工作,可能你应该试试'application.fusebox'格式。但最简单的解决办法就是按照我在答案中提出的方式去做。 – Sergii 2011-05-08 14:26:24

+0

@Sergii:请介绍一下“我建议将cfswitch代码移到定义应用程序设置的组件主体中”。在此应用程序中,所有设置均在fusebox.init或appliction.cfc中定义。应用程序设置没有单独的CFC。谢谢@ Sergii:请介绍一下“我建议将cfswitch代码移到定义应用程序设置的组件主体中”。在此应用程序中,所有设置均在fusebox.init或appliction.cfc中定义。应用程序设置没有单独的CFC。所以也许在fusebox.init放置开关,t – Cheeky 2011-05-12 05:58:16