redémarrer l'application sans redémarrer le serveur?
Est-il un moyen de redémarrer une application ColdFusion sans redémarrer le serveur?
il y a deux applications ColdFusion qui tournent sur un serveur et je ne veux en redémarrer qu'une.
8 réponses
si vous utilisez Application.cfc, vous pouvez le mettre à jour pour que vous puissiez forcer un appel à onApplicationStart() si quelque chose de spécifique est passé dans l'url, ou quelque chose de similaire. Il suffit de placer un chèque pour ce jeton magique dans onRequestStart(), et d'appeler onApplicationStart() si c'est le cas.
si vous ne l'êtes pas, vous pouvez essayer la suggestion de @Marcos. Je ne suis pas sûr de ce que ramifications que peuvent avoir dans votre application. Ce que je suggérerais, c'est de renommer votre candidature, donc ça commence par la nouvelle application.
Si vous êtes sur CF9, run ApplicationStop()
https://cfdocs.org/applicationstop
Et Voilà, ma version CF7 / 8 de CF9's ApplicationStop. Je pense que c'est sans danger, en notant le commentaire 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>
comme mentionné par Henry, il est mon billet de blog sur le sujet: http://misterdai.wordpress.com/2010/06/14/cf-flag-application-to-run-onapplicationstart-part-2/
une façon moins invasive de terminer votre application est de mettre temporairement L'ApplicationTimeout à quelque chose de très court.
voici un exemple d'application.fichier cfc où l'application est réglée sur timeout en 10 secondes, ce qui est assez court pour faire un changement et ensuite vérifier en arrière:
<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>
Vous pourriez avoir besoin de limiter la session, trop. Voir cet article par Ben Nadel pour un examen approfondi des délais D'Application et de Session.
si vous utilisez application.cfc, collez ceci en haut de votre fonction onRequestStart:
<!--- RESET APP? --->
<cfif isdefined("url.reinit")>
<cfset OnApplicationStart()>
<cfset OnSessionStart()>
</cfif>
alors vous pouvez passer un var url à n'importe quel cfm et l'application se réinitialisera.
je mets habituellement une référence à la session de chaque utilisateur dans une structure dans mon champ D'Application pour surveiller ce qui se passe dans l'application. Peut-être que faire quelque chose de similaire dans la portée du serveur pourrait aider ici. À essayer:
alors vous auriez une référence à l'objet de l'application réelle en dehors de la portée de cette application. Vous pourriez essayer toutes sortes de choses destructrices pour vous en débarrasser. Essayez ceci à vos risques et périls!!! Et le faire sur un serveur de dev avant de le faire sur votre boîte de production. ;)
Utiliser cfinvoke
.
<cfinvoke method="onApplicationEnd" component="Application">
<cfinvokeargument name="ApplicationScope" value="#application#" />
</cfinvoke>