2012-05-16 68 views
2

將部分文件部署到ColdFusion網站/應用程序後,今天上午我遇到了一個問題。作爲部署的一部分,我如何清除ColdFusion模板緩存?

我用一些新代碼更新了現有的CFC。該CFC有一個返回的實例化的對象的init()方法:

原始MyObject.cfc:

<cfscript> 
    VARIABLES.MyParam = ""; 
</cfscript> 

<cffunction name="init" returntype="MyObject" output="false"> 
    <cfargument name="MyParam" type="String" required="true" /> 

    <cfscript> 
     VARIABLES.MyParam = ARGUMENTS.MyParam; 

     return THIS; 
    </cfscript> 
</cffunction> 

新MyObject.cfc:

<cfscript> 
    VARIABLES.MyParam = ""; 
</cfscript> 

<cffunction name="init" returntype="MyObject" output="false"> 
    <cfargument name="MyParam" type="String" required="true" /> 

    <cfscript> 
     setMyParam(ARGUMENTS.MyParam); 

     return THIS; 
    </cfscript> 
</cffunction> 

<cffunction name="setMyParam" output="false" returntype="Void"> 
    <cfargument name="MyParam" type="String" required="true" /> 

    <cfset VARIABLES.MyParam = Trim(ARGUMENTS.MyParam) /> 
</cffunction> 

<cffunction name="getMyParam" output="false" returntype="String"> 
    <cfreturn VARIABLES.MyParam /> 
</cffunction> 

在任何時間一個對象那擴展了這個名爲init()的CFC,它拋出了一個異常:

「從init函數返回的值不是MyObject類型的。」

在部署此更改的其他任何環境中都沒有發生此問題 - 僅在生產中。

修復它在ColdFusion Administrator中清除模板緩存的唯一一件事。

所以,我要麼尋找一種方法來防止這種情況發生在未來和/或當我部署文件時自動清除模板緩存的方法。

僅供參考,我目前使用Tortoise SVN部署文件。

回答

3

在你的init()(或更好,在另一重載式法),編程方式調用管理API的clearTrustedCache()方法:

<cfscript> 

    // Login is always required (if the administrator password 
    // is enabled in the ColdFusion Administrator). 
    // This example uses two lines of code. 

    adminObj = createObject("component","cfide.adminapi.administrator"); 
    adminObj.login("admin"); 

    // Instantiate the runtime object. 
    myObj = createObject("component","cfide.adminapi.runtime"); 

    // clear cache 
    myObj.clearTrustedCache(); 

    // Stop and restart trusted cache. However, only the clearTrustedCache function needs to be called. 
    myObj.setCacheProperty("TrustedCache", 0); 
    myObj.setCacheProperty("TrustedCache", 1); 
</cfscript> 

此功能一直在地方早在CF7( Source)。請注意,您將需要CF管理員密碼。

我也建議清除緩存組件,如果你在你的管理員是否啓用該選項:

myObj.clearComponentCache(); 
+0

注意,這將刷新整個服務器的信任的高速緩存,而不僅僅是單個應用程序。性能可能是該解決方案(或任何自動化解決方案)的考慮因素。 – nosilleg

+0

您可能有更好的結果,只需停止/啓動緩存而不是實際清除緩存。我一直在發現,清理緩存與沉重的應用程序,特別是與常見的coldfusion框架將掛起一個實例實例。停止/啓動似乎具有與殺死服務器相同的效果。否則肖恩的回答正是我所建議的。 –

相關問題