有沒有一種方法可以在不重新啓動整個服務器的情況下重新啓動ColdFusion應用程序?重新啓動應用程序而無需重新啓動服務器?
有兩個ColdFusion應用程序在服務器上運行,我只想重新啓動其中一個。
有沒有一種方法可以在不重新啓動整個服務器的情況下重新啓動ColdFusion應用程序?重新啓動應用程序而無需重新啓動服務器?
有兩個ColdFusion應用程序在服務器上運行,我只想重新啓動其中一個。
如果您使用的是Application.cfc,則可以對其進行更新,以便在url中傳遞特定的內容或類似內容時強制對onApplicationStart()進行調用。只需在onRequestStart()中檢查該魔術標記,如果是,則調用onApplicationStart()。
如果你不是,你可以嘗試@馬科斯的建議。我不確定你的應用程序可能會有什麼後果。我所建議的實際上是重命名你的應用程序,所以它開始作爲一個新的應用程序。
我通常會將每個用戶會話的引用放入我的應用程序範圍中的結構中,以監視應用程序中發生了什麼。也許在服務器範圍內做類似的事情可能會有幫助。嘗試:
< CFSET server.runningApplications [「對myApp」] =應用程序/ >
然後,你有該應用程序的範圍之外,以實際的應用對象的引用。你可以嘗試各種破壞性的東西來擺脫它。試試這個需要您自擔風險!在您的生產箱上完成之前,先在開發服務器上執行此操作。 ;)
如果你在CF9,運行ApplicationStop()
https://cfdocs.org/applicationstop
<cfset structClear(application) />
答案在哪裏? – Henry 2010-06-25 17:49:22
使建議可見。 : - \使用預覽。此外,該建議已經提供。如果您同意,請提出該建議。不要重新提交。 – 2010-06-25 20:54:33
使用cfinvoke
。
<cfinvoke method="onApplicationEnd" component="Application">
<cfinvokeargument name="ApplicationScope" value="#application#" />
</cfinvoke>
我不認爲運行onApplicationEnd()會導致應用程序重新啓動。在CF8/CFMX7上,調用onApplicationStart()是最接近你想要的行爲 - 但要注意它不會是線程安全的:CF會自動調用單個線程到onApplicationStart()當它調用它時,當你打電話時不要這麼做。在CF9上,applicationStop()是正確的方法。 – 2010-06-25 22:33:42
在這裏,我來說說,我的CF7/8版本的CF9的ApplicationStop。我相信這是線程安全的,注意到肖恩的評論。
<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>
正如亨利所說,他是我關於這個問題的博客文章: http://misterdai.wordpress.com/2010/06/14/cf-flag-application-to-run-onapplicationstart-part-2/
結束你的應用的微創治療方法是將ApplicationTimeout臨時設置的東西很短。
這是從哪兒應用程序被設置在10秒超時的情況下的Application.cfc文件,這是很多短的做出改變,然後檢查回來的例子:
<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>
您可能需要限制會議也是如此。有關深入瞭解應用程序和會話超時的信息,請參閱this article by Ben Nadel。
如果您正在使用的Application.cfc,你onRequestStart函數的頂部堅持這樣的:
<!--- RESET APP? --->
<cfif isdefined("url.reinit")>
<cfset OnApplicationStart()>
<cfset OnSessionStart()>
</cfif>
然後,你可以通過一個URL VAR任何CFM和應用程序將重置。
這是唯一的'正確的'解決方案(你必須在CF9上)。其他的一切都是潛在的線程安全問題的一個可疑的解決方法。 – 2010-06-25 22:34:40