古いプロジェクトで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.cfm
または(このファイルが変更される頻度、fusebox.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>
ところで、安全のために、通常はfusebox.xml.cfm
/に名前を変更しますserver.xml.cfm
-- CFML ファイルにはなりませんが、Web サーバーのトリックなしで直接アクセスから保護します
また、最新 (2009 年以降) の Fusebox ベースのプロジェクトApplication.cfc
で構成に使用したことにも言及する価値があります。Application.cfc
これらは、メソッドとして利用可能な初期化やその他のものをより適切に制御できる最新のスタイルのアプリケーションです。
このアプローチでは、Fusebox はFUSEBOX_PARAMETERS
スコープとして構成されます。その値をオーバーライドするのはさらに簡単です。単純にserver.cfm
ファイルをインクルードし、プレーンな CFScript のチャンクをFUSEBOX_PARAMETERS.datasource = "my_datasource"
.