В старых проектах с 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, но защищает от прямогодоступ без хитростей веб-сервера
Также стоит отметить, что в последних (с 2009 года) проектах на базе Fusebox мы использовали Application.cfc
для конфигурации.Это современные приложения с гораздо лучшим контролем над инициализацией и другие вещи, доступные как Application.cfc
методы.
При таком подходе Fusebox настраивается как FUSEBOX_PARAMETERS
scope.Еще проще переопределить его значения, просто включите файл server.cfm
и поместите туда кусок простого CFScript с FUSEBOX_PARAMETERS.datasource = "my_datasource"
.