Tengo problemas para establecer asignaciones en Application.cfc Tenemos diverent Server (dev, QS, prod) Cada uno con Pathes un poco diferente. Quiero configurar parámetros y variables específicos 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.¿Cómo puedo incluir asignaciones en Application.cfc desde un archivo de propiedades externo?
Normaly configura asignaciones en Applcation.cfc así:
<!--- in Application.cfc --->
<cfset this.mappings['/components'] = "D:\Inetpub\wwwroot\myApp\components">
En algún lugar de un archivo normal de pies cúbicos por minuto que instatiate una prueba llamada a través de CFC:
<cfset t = createObject("component", "components.test")>
Quiero configurar solamente las asignaciones una vez en onApplicationsStart
<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>
Pero esto no funciona porque this.mappings está vacío y la próxima solicitud. :(
poner esto a OnRequestStart
<!--- 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>
consigo un error que el componente no se puede encontrar. Esto es extraño.
Poner la estructura en Alcance de uso
<cfloop index="key" list="#sections.mappings#">
<cfset APPLICATION.mappings[key] = getProfileString(application.ini.iniFile, "mappings", key)>
</cfloop>
¿Cómo llamar a mi componente?
<cfset t = createObject("component", "application.components.test")>
No funciona.
Así que tengo 3 objetivos.
- leer todos pathes y las asignaciones de archivo ini
- leerlos una vez en ApplicationStart
- el uso fácil en el código fuente.
Muchas gracias, esto me da un gran paso en la dirección correcta. Pero debido a esta línea Obtengo un "error no encontrado" cuando llamo a una página que no está en webroot. –
inog
No quiero codificarlo. ¿Alguna idea para este dilema del huevo o la gallina? – inog
Eso es porque llama a expandpath() relativo a la ubicación actual del archivo. Tendrás que usar una ruta absoluta, he actualizado mi respuesta para mostrar esto –