ColdFusion — не найдена соответствующая функция [имя_функции]

Этот код работает в моей среде разработки, но не в производственной среде. Я загружаю CFC в область сеанса, если это имеет значение. Из этого дампа видно, что в CFC есть функция с именем getQuestions, но вызывающая ее функция не находит ее. я получаю ошибку

«Не найдена соответствующая функция [getQuestions]».

getQuestions — это функция, которая была добавлена ​​с момента моего последнего нажатия.

Я проверил конфигурации сервера как для dev, так и для prod-сервера, и они одинаковы, поэтому я не уверен, почему это происходит. Среда Prod — это виртуальная машина, если это имеет значение. Кто-нибудь может пролить свет на это?

введите здесь описание изображения


person Lance    schedule 12.12.2017    source источник
comment
Изменилась ли сигнатура функции? Вы загружаетесь в область сеанса или область приложения? Если второе, перезагружали ли вы приложение?   -  person Miguel-F    schedule 12.12.2017
comment
Я загружаю его в область сеанса. Если я загружаю его прямо перед тестом, он работает, но затем, когда я удаляю нагрузку из теста, он не работает почти так же, как есть два разных местоположения области сеанса. Если это имеет смысл.   -  person Lance    schedule 12.12.2017
comment
Добавьте код в свой Application.cfc, чтобы убедиться, что время сеанса полностью истекло. Похоже, вы все еще работаете со своим старым сеансом.   -  person Shawn    schedule 13.12.2017
comment
Похоже, вам нужно вызвать функцию this.getQuestions()   -  person James A Mohler    schedule 13.12.2017


Ответы (1)


Когда вы создаете экземпляр объекта (экземпляра 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(), чтобы найти это и очистить мой сеанс. Вы также захотите сделать это для переменных области приложения.

person Nathan Strutz    schedule 01.02.2018