2

私は Coldfusion を使用して Fusebox アプリケーションに取り組んでいfusebox.xmlますが、実稼働サーバーと開発サーバーで少し異なるファイルを作成したいと考えています。このファイルは単なるファイルのように見えるためxml(つまり、ファイルであるとは思えませんcfm)、 内で一部のif..else..ロジックを使用できないようfusebox.xmlです。

上記の私の仮定が間違っているのか、それとも開発用と本番用の 2 つのファイルを使用する方法があるのでしょうか?

4

3 に答える 3

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.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".

于 2011-02-15T07:09:28.187 に答える
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>

そして明らかに、アプリケーション名は、本番環境と開発環境では異なります。

于 2011-03-01T01:30:42.097 に答える
0

Fusebox は使用しませんが、同様の構成ファイルがあり、開発からテスト、本番環境まで異なります。3 つのバージョンすべてをリポジトリ内の異なるディレクトリに保持し、必要な (実稼働) バージョンを実稼働サーバーにアップロードするだけです。これらのファイルはめったに変更されないため、これでうまくいきます。

Fusebox のドキュメントには、別の使用方法が示されているようには見えませんがfusebox.xml、Fusebox の専門家がそれを確認できる可能性があります。

于 2011-02-14T23:27:31.697 に答える