разработка против производства fusebox.xml - PullRequest
2 голосов
/ 15 февраля 2011

Я работаю над приложением Fusebox, использующим Coldfusion, и есть файл fusebox.xml, который я хотел бы немного отличать на рабочем сервере от сервера разработки. Поскольку кажется, что этот файл является просто xml файлом (то есть: я не думаю, что это может быть cfm файл), кажется, что я не могу использовать некоторую логику if..else.. в fusebox.xml.

Так что мне интересно, неверно ли мое предположение выше или есть ли способ использовать два файла, один для разработки и один для производства?

Ответы [ 3 ]

3 голосов
/ 15 февраля 2011

В старых проектах с 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".

2 голосов
/ 01 марта 2011

Вот что я сделал:

<!--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 голосов
/ 15 февраля 2011

Мы не используем Fusebox, но у нас есть похожие файлы конфигурации, которые отличаются от dev для тестирования до производства.Мы просто храним все три версии в разных каталогах в репозитории и загружаем требуемую (производственную) версию на рабочие серверы.Поскольку эти файлы изменяются редко, это работает для нас.

Fusebox документы , похоже, не указывают способ использования другого fusebox.xml, но, возможно, специалист по Fusebox может это подтвердить

...