2011-02-14 77 views
2

我正在使用Coldfusion處理Fusebox應用程序,並且有一個fusebox.xml文件,我希望生產服務器上的文件與開發服務器上的文件略有不同。由於看起來這個文件只是一個xml文件(即:我不認爲它可以是cfm文件),所以我似乎不能在fusebox.xml內使用一些if..else..邏輯。開發vs生產fusebox.xml

所以我想知道如果我上面的假設是錯誤的,或者如果有一種方法使用兩個文件,一個用於開發和一個用於生產?

+0

如果你正在尋找更換硬殼舊熔斷器,看看這個https://github.com/jamie-pate/FuseBoxFreedom – 2013-09-22 23:51:54

回答

2

這裏是我做過什麼:

<!--For Development Mode = "development-full-load" , For Production Mode = "production" --> 
<if condition="application.applicationname EQ 'xyz-dev'"> 
    <true> 
     <parameter name="mode" value="development-full-load"/> 
    </true> 
    <false> 
     <parameter name="mode" value="production"/> 
    </false> 
</if> 

而且很明顯的應用程序名稱是用於生產環境比它的開發環境不同。

0

我們不使用保險絲盒,但是我們有類似的配置文件,這些配置文件不同於開發測試生產。我們只將所有三個版本保存在存儲庫中的不同目錄中,並將所需(生產)版本上傳到生產服務器。由於這些文件很少發生變化,這對我們很有用。

保險絲盒docs似乎沒有指示使用不同的fusebox.xml的方法,但也許Fusebox的專家可以證實這一點。

3

fusebox.xml的舊項目中,我們使用的另一個配置副本server.xml

此文件通常不受源代碼管理,因此它允許輕鬆配置應用程序實例。它的結構是很一樣fusebox.xml,但只包括屬性,我們要覆蓋當前實例,例如數據源或路徑:

<?xml version="1.0" encoding="UTF-8"?> 
<server> 
    <parameter name="mode" value="development-full-load" /> 
    <parameter name="datasource" value="my_datasource" /> 
    <parameter name="logRotatePeriod" value="50" /> 
    <parameter name="someDataPath" value="/home/xxx/yyy/zzz/"/> 
</server> 

fusebox.appinit.cfmfusebox.init.cfm(取決於這個文件是如何經常更換,或任何其他原因)解析此文件並更新application.fusebox中的匹配條目。例如,下面是這麼做的功能:

<cffunction name="loadLocalConfig" returntype="void" output="false" hint="Read and apply local server.xml configuration"> 
<cfscript> 

    var filesServerPath = application.fusebox.AppRootDirectory & application.fusebox.filesServer; 
    var fileParameters = ""; 
    var oFileParameters = ""; 
    var aServer = ""; 
    var i = ""; 

    if (FileExists(filesServerPath)) { 
     // read the contents 
     fileParameters = FileRead(filesServerPath); 
     // parse XML text into object 
     oFileParameters = XMLParse(trim(fileParameters)); 
     // get fusebox parameters and update their values 
     if (StructKeyExists(oFileParameters, "server")){ 
      aServer = oFileParameters.server.XmlChildren; 
      for (i=1; i LTE ArrayLen(aServer); i=i+1) { 
       if (aServer[i].XmlName EQ "parameter" AND StructKeyExists(application.fusebox, aServer[i].XmlAttributes.name)) { 
        application.fusebox[aServer[i].XmlAttributes.name] = aServer[i].XmlAttributes.value; 
       } 
      } 
     } 
    } 

</cfscript> 
</cffunction> 

BTW,爲安全起見,我們通常會把重命名爲fusebox.xml.cfm/server.xml.cfm - 它不讓它CFML文件,而是從直接存取保護沒有Web服務器技巧


而且它值得一提的是,在最新的(2009年以來)的保險絲盒的項目,我們已經使用Application.cfc進行配置。這些都是現代風格的應用程序,可以更好地控制初始化和其他可用的方法,如Application.cfc方法。

使用此方法將熔絲盒配置爲FUSEBOX_PARAMETERS範圍。覆蓋它的值甚至更容易,只需包含server.cfm文件,並在其中放入一塊普通的CFScript,其中包含FUSEBOX_PARAMETERS.datasource = "my_datasource"