¿Hay alguna manera de reiniciar una aplicación ColdFusion sin reiniciar todo el servidor?reiniciar la aplicación sin reiniciar el servidor?
Hay dos aplicaciones ColdFusion ejecutándose en un servidor y solo quiero reiniciar una de ellas.
¿Hay alguna manera de reiniciar una aplicación ColdFusion sin reiniciar todo el servidor?reiniciar la aplicación sin reiniciar el servidor?
Hay dos aplicaciones ColdFusion ejecutándose en un servidor y solo quiero reiniciar una de ellas.
Si está utilizando Application.cfc, puede actualizarlo para que pueda forzar una llamada a onApplicationStart() si se pasa algo específico en la url, o algo similar. Simplemente coloque una marca para ese token mágico en onRequestStart(), y llame aApplicationStart() si es así.
Si no lo está, puede intentar la sugerencia de @ Marcos. No estoy seguro de las ramificaciones que pueden tener en su aplicación. Lo que sugeriría es cambiar el nombre de su aplicación, por lo que comienza como una nueva aplicación.
Normalmente coloco una referencia a la sesión de cada usuario en una estructura en el ámbito de mi Aplicación para supervisar lo que sucede en la aplicación. Quizás hacer algo similar en el alcance del Servidor podría ayudar aquí. Proveedores:
< server.runningApplications cfset [ "Myapp"] = Aplicación/>
entonces tendría una referencia al objeto de aplicación real fuera del alcance de esa aplicación. Podrías probar todo tipo de cosas destructivas para deshacerte de él. ¡Prueba esto bajo tu propio riesgo! Y hágalo en un servidor de desarrollo antes de hacerlo en su caja de producción. ;)
Si estás en CF9, ejecute ApplicationStop()
https://cfdocs.org/applicationstop
<cfset structClear(application) />
¿dónde está la respuesta? – Henry
Sugerencia hecha visible. : - \ Usa la vista previa. Además, esa sugerencia ya había sido dada.Si está de acuerdo, vote esa sugerencia. No volver a enviarlo. –
Uso cfinvoke
.
<cfinvoke method="onApplicationEnd" component="Application">
<cfinvokeargument name="ApplicationScope" value="#application#" />
</cfinvoke>
No creo que ejecutar en ApplicationEnd() haga algo útil en términos de hacer que una aplicación se reinicie. En CF8/CFMX7, invocar onApplicationStart() es lo más cercano que obtendrá al comportamiento que desea, pero tenga en cuenta que no será seguro para subprocesos: CF encola automáticamente las llamadas a onApplicationStart() CUANDO LO LLAME pero puede hacerlo ' Hago eso cuando lo llamas. En CF9, applicationStop() es la forma correcta de hacerlo. –
Aquí tienes, mi versión CF7/8 de CF9's ApplicationStop. Creo que esto es seguro para subprocesos, teniendo en cuenta el comentario de Sean.
<cffunction name="ApplicationStop" returntype="boolean" output="false">
<cfif IsDefined('application')>
<cftry>
<!--- This is just in case there's no app scope but variables.application --->
<cfset CreateObject('java', 'coldfusion.runtime.ApplicationScopeTracker').cleanUp(application) />
<cfreturn true />
<cfcatch type="any"></cfcatch>
</cftry>
</cfif>
<cfreturn false />
</cffunction>
Como se mencionó por Henry, que es mi blog sobre el tema: http://misterdai.wordpress.com/2010/06/14/cf-flag-application-to-run-onapplicationstart-part-2/
una forma menos invasiva de poner fin a su aplicación es fijar temporalmente el ApplicationTimeout a algo muy corto.
Aquí se muestra un ejemplo de un archivo Application.cfc donde la aplicación se establece en el tiempo de espera en 10 segundos, que es un montón corto para hacer un cambio y luego revise de nuevo:
<cfcomponent displayname="Application">
<cfscript>
this.name = "myAppName";
this.setclientcookies="yes";
this.sessionmanagement="yes";
this.sessiontimeout= CreateTimeSpan(0,0,60,0);
this.applicationTimeout= CreateTimeSpan(0,0,0,10);
</cfscript>
...
</cfcomponent>
Puede que tenga que limitar la sesión, también. Consulte this article by Ben Nadel para ver en detalle los tiempos de espera de la aplicación y la sesión.
Si está utilizando Application.cfc, pegar esto en el comienzo de su función onRequestStart:
<!--- RESET APP? --->
<cfif isdefined("url.reinit")>
<cfset OnApplicationStart()>
<cfset OnSessionStart()>
</cfif>
entonces puede pasar de una var url a cualquier pies cúbicos por minuto y la aplicación va a restablecer.
Esta es la única solución "correcta" (y debe estar en CF9). Todo lo demás es una solución dudosa con posibles problemas de seguridad de subprocesos. –