2017-12-12 17 views
4

このコードは、私の開発環境では動作しますが、実稼働環境では動作しません。問題の場合には、CFCをセッションスコープにロードしています。このダンプから、CFCにはgetQuestionsという機能がありますが、それを呼び出す関数が見つからないことがわかります。エラーが発生しましたColdFusion - 関数[functionName]が見つかりませんでした

"一致する関数[getQuestions]が見つかりませんでした"

getQuestionsは、最後のプッシュから追加された関数です。

私はdevとprodサーバーの両方のサーバー設定をチェックしていますが、同じものなので、なぜこれが起こっているのかわかりません。 Prod環境は、違いがある場合はVMです。誰でもこの光を放つことができますか?

enter image description here

+1

関数のシグネチャが変更されましたか?セッションスコープまたはアプリケーションスコープにロードしていますか?後者の場合、アプリケーションをリロードしましたか? –

+0

私はそれをセッションスコープにロードしています。テストの直前にロードすると動作しますが、テストからロードを削除すると、2つの異なるセッションスコープの場所があるように動作しません。それが意味をなさないならば。 – Lance

+0

Application.cfcにコードを追加して、セッションが完全にタイムアウトするようにします。それはあなたの古いセッションをまだ実行しているように聞こえる。 – Shawn

答えて

0

あなたがオブジェクト(CFCのインスタンス)をインスタンス化するとき、それがスコープ解除されるまで、それは、それは(.cfcというファイル)から来たクラスのそのバージョンと、そのオブジェクトとしてとどまりますガベージコレクションの対象となります。

あなたはこのように見えるかもしれなかったものの非常に短いバージョン:

// Write a component 
fileWrite("a.cfc", "component { function foo(){return 'bar';} }"); 

// instantiate that component 
a = new a(); 
writeOutput(a.foo()); // writes "bar" to the page 

// now let's rewrite the file 
fileWrite("a.cfc", "component { function bar(){return 'foo';} }"); 

writeOutput(a.foo()); // still writes "bar" to the page 
writeOutput(a.bar()); // error - no such method 

a.cfcの定義を変更すると、変数aが変更を意味するものではありません - それはまだ古いバージョンです。

ここで、Surveyオブジェクトをセッションスコープに配置します。そのスコープは、セッションが終了するまで持続されます。アクティブでないためにタイムアウトするか、サーバーを再起動する必要があります。 structDelete()を使用してセッションから削除することも、それを上書きすることもできます(session.survey = new Survey())。しかし、これらのいずれかが発生するまで、セッションには古いサーベイオブジェクトが引き継がれます。

このようなシナリオでは、私はセッションをリセットする傾向がありますので、?sessionreset=trueを追加し、Application.cfcのOnRequestStart()にコードを入れてセッションをクリアしてください。また、アプリケーションスコープの変数に対してもこれを行うことになります。

関連する問題