今朝、いくつかのファイルを 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 を使用してファイルをデプロイしています。