3

今朝、いくつかのファイルを ColdFusion Web サイト/アプリケーションにデプロイした後、問題に遭遇しました。

新しいコードで既存の 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>

この CFC を拡張したオブジェクトが init() を呼び出すたびに、例外がスローされていました。

「init 関数から返された値は MyObject 型ではありません。」

この問題は、この変更がデプロイされた他の環境では発生せず、本番環境でのみ発生しました。

それを修正した唯一のことは、ColdFusion Administrator のテンプレート キャッシュをクリアすることでした。

そのため、今後これが発生しないようにする方法や、ファイルをデプロイするときにテンプレート キャッシュを自動的にクリアする方法を探しています。

参考までに、現在、Tortoise SVN を使用してファイルをデプロイしています。

4

1 に答える 1

4

init() (または、別の reload スタイルのメソッドが望ましい) で、管理 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 (ソース) までさかのぼります。これには CF 管理者パスワードが必要になることに注意してください。

管理者でそのオプションが有効になっている場合は、コンポーネントキャッシュをクリアすることもお勧めします。

    myObj.clearComponentCache();
于 2012-05-16T14:52:24.893 に答える