首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >开发与生产fusebox.xml

开发与生产fusebox.xml
EN

Stack Overflow用户
提问于 2011-02-15 06:37:56
回答 3查看 907关注 0票数 2

我正在使用Coldfusion开发一个Fusebox应用程序,我希望生产服务器上的fusebox.xml文件与开发服务器上的略有不同。由于这个文件看起来只是一个xml文件(即:我不认为它可以是一个cfm文件),所以我似乎不能在fusebox.xml中使用一些if..else..逻辑。

所以我想知道我上面的假设是不是错了,或者有没有办法使用两个文件,一个用于开发,一个用于生产?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-01 09:30:42

下面是我所做的:

代码语言:javascript
复制
<!--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>

显然,生产环境的应用程序名称与开发环境的应用程序名称不同。

票数 2
EN

Stack Overflow用户

发布于 2011-02-15 15:09:28

在使用fusebox.xml的旧项目中,我们使用另一个名为server.xml的配置副本。

此文件通常不受源代码控制,因此它允许轻松配置应用程序实例。它的结构与fusebox.xml非常相似,但只包含我们想要覆盖当前实例的属性,例如数据源或路径:

代码语言:javascript
复制
<?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中的匹配条目。例如,下面是执行此操作的函数:

代码语言:javascript
复制
<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>

顺便说一句,为了安全起见,我们通常将它们重命名为CFML /server.xml.cfm --它不会使其成为CFML文件,但可以防止没有web服务器技巧的直接访问

值得一提的是,在最新的(自2009年以来)基于Fusebox的项目中,我们使用了Application.cfc进行配置。这些都是现代风格的应用程序,可以更好地控制初始化和其他Application.cfc方法。

通过这种方法,Fusebox被配置为FUSEBOX_PARAMETERS作用域。覆盖它的值甚至更容易,只需包含server.cfm文件并使用FUSEBOX_PARAMETERS.datasource = "my_datasource"放入一大块普通的CFScript。

票数 3
EN

Stack Overflow用户

发布于 2011-02-15 07:27:32

我们不使用Fusebox,但我们有类似的配置文件,这些配置文件从开发到测试再到生产都不同。我们只需将这三个版本都保存在存储库中的不同目录中,并将所需的(生产)版本上传到生产服务器。由于这些文件很少更改,因此这对我们来说是有效的。

Fusebox docs似乎没有指明使用不同fusebox.xml的方法,但也许Fusebox的专家可以证实这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4998110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档