¿Cómo puedo incluir asignaciones en Application.cfc desde un archivo de propiedad externo?
Tengo problemas con la configuración de asignaciones en Application.cfc Tenemos un servidor diferente (dev, QS, prod) Cada uno con un poco diferente de Pathes. Quiero establecer parches y variables específicas del servidor a través del archivo de configuración. En ApplicationStart, lee el archivo ini y configura su sistema.http://www.raymondcamden.com/index.cfm/2005/8/26/ColdFusion-101-Config-Files-AGoGo Esto funciona bien.
Normalmente, se configuran asignaciones en Applcation.cfc de esta forma:
<code><!--- in Application.cfc ---> <cfset this.mappings['/components'] = "D:\Inetpub\wwwroot\myApp\components"> </code>
En algún lugar de un archivo cfm normal, me insisto en una prueba llamada cfc a través de:
<code><cfset t = createObject("component", "components.test")> </code>
Quiero establecer las asignaciones una sola vez enonAplicacionesStart
<code><cffunction name="OnApplicationStart" access="public" returntype="boolean" output="false" hint="Fires when the application is first created."> <!---create structure to hold configuration settings---> <cfset ini = structNew()> <cfset ini.iniFile = expandPath("./ApplicationProperties.ini")> <cfset application.ini = ini> <!--- read ini file ---> <cfset sections = getProfileSections(application.ini.iniFile)> <cfloop index="key" list="#sections.mappings#"> <cfset this.mappings[key] = getProfileString(application.ini.iniFile, "mappings", key)> </cfloop> </code>
Pero esto no funciona porque this.mappings está vacío y la próxima solicitud. :(
Poner esto en OnRequestStart
<code><!--- read ini file ---> <cfset sections = getProfileSections(application.ini.iniFile)> <cfloop index="key" list="#sections.mappings#"> <cfset this.mappings[key] = getProfileString(application.ini.iniFile, "mappings", key)> </cfloop> </code>
Recibo un error que el componente no se puede encontrar. Esto es extraño.
Poner la estructura en el ámbito de aplicación
<code> <cfloop index="key" list="#sections.mappings#"> <cfset APPLICATION.mappings[key] = getProfileString(application.ini.iniFile, "mappings", key)> </cfloop> </code>
¿Cómo llamar a mi componente?
<code><cfset t = createObject("component", "application.components.test")> </code>
No funciona
Así que tengo 3 objetivos.
Leyendo todos los parches y mapeos del archivo ini.leyéndolos una vez en ApplicationStartFácil uso en código fuente.