coldfusion - 开发与生产 fusionbox.xml

标签 coldfusion fusebox

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

所以我想知道我的上述假设是否错误,或者是否有一种方法可以使用两个文件,一个用于开发,一个用于生产?

最佳答案

在使用 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.cfmfusebox.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 范围。覆盖其值甚至更容易,只需包含 server.cfm 文件并使用 FUSEBOX_PARAMETERS.datasource = "my_datasource" 放置一 block 纯 CFScript。

关于coldfusion - 开发与生产 fusionbox.xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4998110/

相关文章:

coldfusion - GlassFish Server(开源)ColdFusion "requested resource is not available"错误

javascript - 使用 javascript 控制 CFINCLUDE 文件

java - 如何查看 http-response-code 406 异常的消息

coldfusion - ColdFusion 框架 "fusebox"究竟做了什么?

coldfusion - 无需访问 webroot 即可安装 Fusebox

coldfusion - Lucee Document is empty 错误

xml - ColdFusion:无效的 XML 控制字符(十六进制)

coldfusion - 如何最好地创建和存储 APPLICATION 变量?

coldfusion - 当查询列是变量时从 cfquery 获取值