Неправильный Application.cfc, на который ссылается тестовый сайт в подкаталоге основного сайта - PullRequest
1 голос
/ 10 сентября 2010

У меня есть проект CF9 с многоуровневой структурой каталогов. На корневом уровне у меня есть живой производственный сайт с его Application.cfc. Он содержит ряд переменных, которые связаны с флагом debugMode - поэтому в случае рабочего сайта этот флаг имеет значение false.

В подкаталоге рабочего сайта у меня есть папка, содержащая тестовую версию сайта. Это имеет свой собственный Application.cfc с debugMode, установленным в true. Кроме этого флага и изменений, которые мы тестируем, он идентичен производственному Application.cfc.

Не было никаких проблем с этим, пока мы не добавили логику для сброса Application.cfc, чтобы увидеть наши изменения, не ожидая тайм-аута (который мы установили на 30 минут).

Для этого мы добавили этот блок в функцию OnRequestStart в Application.cfc (присутствует как в рабочей, так и в тестовой версиях):

    <cfif StructKeyExists( URL, "reset" )>

        <!--- Reset application and session. --->
        <cfset THIS.OnApplicationStart() />
        <cfset THIS.OnSessionStart() />

    </cfif>

Изначально это работало нормально. Если мы добавим «? Reset» в URL для какой-либо страницы тестовой версии, изменения, внесенные Application.cfc, будут немедленно отражены, но мы быстро обнаружили неприятный побочный эффект: вызов метода reset в тестовой версии ТАКЖЕ изменяет наш производственный сайт на использование тестирую версию Application.cfc, тем самым всецело ошеломляя.

Запуск логики «reset» на производственном сайте устранил эту проблему, но затем заставил все тестовые страницы использовать производственный Application.cfc вместо тестовой версии. Ожидание времени ожидания и обновления Application.cfcs автоматически не имело значения, поэтому теперь наша тестовая среда испорчена.

Любое понимание того, что происходит или что делать, будет очень цениться, так как мы довольно озадачены. Это просто плохая архитектура? Мы унаследовали это и теперь довольно привыкли к этой структуре, поэтому было бы предпочтительнее быстрое исправление, но я открыт для предложений.

Спасибо.

1 Ответ

6 голосов
/ 10 сентября 2010

Скорее всего, проблема в том, что два файла application.cfc указывают одно и то же имя приложения.

Итак, по сути, это одно и то же приложение.

Таким образом, независимо от того, запускаете ли вы обновление с «тестового» сайта или с «живого» сайта, выполняется сброс того же самого приложения, а затем выполняется повторное создание переменных с любой версии, с которой вы произвели сброс.

Вам нужно установить имя приложения для "Тестового" приложения на что-то отличное от действующего приложения.

Для теста:

<!--- For the "Test" Application --->
<cfset this.name = "TESTApplication">

Для жизни:

<!--- For the "Live" Application --->
<cfset this.name = "Application">
...