Ошибка при переименовании приложения при попытке совместного использования сеанса между приложениями ColdFusion / ColdBox

Я хочу поделиться данными сеанса между некоторыми приложениями, которые находятся на разных поддоменах (на одном сервере). Раньше я следил за тем, чтобы каждое приложение имело одно и то же имя в соответствующем файле application.cfc. Некоторое время это работает нормально - люди входят в одно приложение; сеанс используется совместно с другими.

Теперь мы хотим преобразовать одно из этих приложений в ColdBox. Итак, я установил ColdBox 4, работающий на ACF 2016, на своей машине разработчика. Изменение имени приложения Coldbox по умолчанию с

this.name = hash( getCurrentTemplatePath() ); 

to

this.name = 'mysite;'

отлично работает на машине разработки, без проблем. Но как только я загружаю тот же код в продакшн (также ACF 2016), я получаю следующую ошибку:

Element CBBOOTSTRAP is undefined in a Java object of type class [Ljava.lang.String;. 

The error occurred in application.cfc: line 50

48 :    public boolean function onRequestStart( string targetPage ){
49 :        // Process ColdBox Request
50 :        application.cbBootstrap.onRequestStart( arguments.targetPage );
51 : 
52 :        return true;

Как только я изменю имя приложения обратно на

this.name = hash( getCurrentTemplatePath() ); 

приложение работает нормально, без ошибок (но сеанс не используется совместно). Я думаю, что сообщение о строке 50 может быть отвлекающим маневром. Я пробовал там всевозможные модификации, но ничего не меняет исходное сообщение об ошибке, кроме изменения имени приложения на то, что было.

Я отключил кеширование компонентов в админке CF и перезапустил (несколько раз) безрезультатно. Я недостаточно знаю о ColdBox, чтобы рискнуть предположить, что может происходить, но я полностью озадачен. Я не знаю, почему он работал на ACF 2016 на одной машине, а на другой - нет. Если у кого-то есть какие-то подсказки, я был бы очень признателен! Спасибо большое!


person daltec    schedule 07.05.2018    source источник
comment
Вы пробовали изменить this.name = 'mysite;' на this.name = 'mysite';   -  person James A Mohler    schedule 08.05.2018
comment
Меня больше удивляет то, что это работало раньше, чем то, что не работает сейчас. Если бы мне пришлось это сделать, я бы использовал либо область сервера (все еще не очень), либо кеш, доступный для обоих приложений (например, Redis). Ошибка сообщает вам, что Coldbox не загружается в область приложения, в которой он ищет; это происходит при ApplicationStart.   -  person Aquitaine    schedule 08.05.2018
comment
Привет, Джеймс, извини, я допустил опечатку в своем посте. Это действительно «мистицизм»; в application.cfc. Хороший улов! Спасибо!   -  person daltec    schedule 08.05.2018


Ответы (1)


Element CBBOOTSTRAP is undefined.

Причина, по которой вы не видите эту проблему в своем локальном разработчике, заключается в том, что вы всегда сначала запускаете приложение CB, поэтому определяете CBBOOTSTRAP в области приложения, прежде чем запускать приложение, отличное от CB. В другой вашей среде приложение, отличное от CB, запускается первым, поэтому это значение еще не определено.

Прекрати, сделай это

Я столкнулся с той же проблемой много лет назад, пытаясь заставить приложение CB и не-CB хорошо играть вместе. IIRC, нам пришлось создать включение общих переменных приложения между ними и включить CFM в оба приложения, так что нам нужно было редактировать только один файл при обновлении любого из этого набора переменных.

Попытка поделиться сеансом может сработать, если вы примете такой подход. В противном случае мы также в конечном итоге создали систему единого входа для входа между нашими CB и сторонними приложениями, чтобы мы могли войти в систему между ними.

person Adrian J. Moreno    schedule 08.05.2018
comment
Спасибо, Адриан. Я читал о том, что основной каталог ColdBox находится вне корневого каталога. Поскольку все эти приложения находятся в разных поддоменах (app1.domain.com, app2.domain.com и т. Д.), Если я переместу каталог ColdBox в C: \, определите там имя основного приложения, удалите имена приложений из всех application.cfcs для приложений, а затем расширить мастер для всех из них, чтобы они унаследовали это одно имя приложения, есть ли у этого подхода достоинства? Я спрашиваю, потому что предпочел бы не пробовать его на производстве, если это вряд ли сработает. Заранее спасибо! - person daltec; 08.05.2018
comment
То, что я написал сейчас, могло не иметь большого смысла! Извините! Я имел в виду найти способ, чтобы отдельные приложения не называли себя в их соответствующих application.cfcs, а скорее наследовали или иным образом получали имя главного приложения от некоторого управляющего application.cfc или другого механизма. Надеюсь, что это поможет прояснить ситуацию! - person daltec; 08.05.2018
comment
Одна вещь, о которой я бы беспокоился при таком подходе, - это конфликты между одноименными переменными области приложения. Как и в appOne, у вас есть applicaiton.foo = x, а в appTwo у вас есть applicaiton.foo = y. Вам придется реорганизовать эти приложения, чтобы они ссылались на отдельный список переменных области приложения. myNewApp теперь будет иметь application.foo = x и applicaiton.bar = y, а код, который был appTwo, будет обновлен для использования application.bar. - person Adrian J. Moreno; 10.05.2018
comment
Это хороший аргумент, Адриан! Думаю, мне просто придется придумать совершенно другой подход - я не понимаю, почему так сложно присвоить собственное имя приложения приложению ColdBox! Я даже попытался отредактировать файл начальной загрузки, но безрезультатно - что бы я ни делал, он выдает ту же ошибку и в той же строке. Похоже, что this.name = hash (getCurrentTemplatePath ()); никак не может быть изменен. В этом нет особого смысла! - person daltec; 10.05.2018