ColdFusion Server CFC Проблема с кэшированием - PullRequest
10 голосов
/ 12 февраля 2010

Я разрабатываю приложения coldFusion на своем ноутбуке с собственным сервером ColdFusion 8 с IIS, который работает в Windows Vista. У меня довольно неприятная проблема.

Проблема заключается в том, что всякий раз, когда я делаю какие-либо изменения в моем CFC, кажется, что, пока я не перезапущу свой сервер приложений ColdFusion, изменения в моем CFC не вступят в силу, пока я не сделаю это. Часто приходится перезагружать всю машину, потому что Windows не может перезапустить службу сервера приложений ColdFusion. Есть ли лучший способ сбросить кэш cfc сервера ColdFusion?

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

Спасибо!

Ответы [ 8 ]

9 голосов
/ 18 февраля 2010

Я гарантирую, что вы создаете их как объекты в некоторой постоянной области, например: приложение, области сеанса. Как правило, чтобы избежать этой проблемы во время разработки, создайте параметр url и проверьте его в файле application.cfm / cfc (или там, где вы создаете объекты) и воссоздайте объекты, если обнаружен этот параметр url.

Пример:

<cfif NOT structKeyExists(application,"myObj") OR structKeyExists(url,"reinit")>
    <cfset application.myObj = createObject("component","path.to.cfc") />
</cfif>

Конечно, вам нужно будет делать это с каждым объектом, с которым у вас возникли проблемы.

1 голос
/ 11 апреля 2013

Снимите флажок «Кеш компонента» в CFAdmin -> Кэширование

Также проверьте CFAdmin -> Mappings и убедитесь, что папка CFC указывает на правильную папку, если она есть. Иногда люди клонируют свой исходный код и не меняют отображение на новую папку.

1 голос
/ 12 февраля 2010

Я не уверен, что это в других версиях CF, но в CF9 вы можете сделать ApplicationStop (), и он сбросит CFApplication и перезагрузит его.

0 голосов
/ 28 апреля 2010

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

Что я делаю, в (Администратор, Кэширование): 1. Я снял все настройки кеша 2. Я установил значения текстового поля на «0» 3. Я держу страницу (Администратор, Кэширование) открытой при разработке, чтобы при загрузке изменения, которое не отражается, я просто нажимал «Очистить кэш шаблона сейчас».

Это то, что у меня работает на CF8, встроенный веб-сервер, XP.

0 голосов
/ 04 марта 2010

Если у вас должно быть кэширование в dev, вы можете сделать то, что я делаю:

Сначала установите флажок для URL-адреса в верхней части метода onRequest (), который вызовет метод onApplicationStart ():

<cfif IsDefined("URL.dev")>
    <cflock timeout="5" scope="Session" type="Exclusive">
        <cfif URL.dev EQ true>
            <cfset SESSION.debug = true />
        <cfelse>
            <cfset StructDelete(SESSION, "debug") />
        </cfif> 
    </cflock>
</cfif>

<cflock timeout="5" scope="Session" type="Readonly">
    <cfif IsDefined("URL.appreset") or IsDefined("SESSION.dev")>
            <cfset StructClear(SESSION) />
            <cfset onApplicationStart() />
        </cfif>
</cflock>   

Это решит большинство ваших проблем. Однако, если у вас есть проблема в классе, который вы загружаете, он не зайдет достаточно далеко, чтобы проверить этот флаг. Решение, которое я использую для этого:

Добавьте в нижнюю часть вашего метода onError () следующее:

<cfif IsDefined("APPLICATION")>
      <cfset StructClear(APPLICATION) />
</cfif>

Наконец, вы хотите проверить, существует ли объект APPLICATION и существует ли каждый класс, который вы объявляете как часть области APPLICATION, или вы хотите вызвать onApplicationStart (). Для этого добавьте следующее справа под первым блоком кода в верхней части onRequestStart ():

<cfif not IsDefined("APPLICATION")
    OR not StructKeyExists(APPLICATION, "[ClassName1]")
    OR not StructKeyExists(APPLICATION, "[ClassName2]")
    ...>
    <cfset onApplicationStart() />
</cfif>
0 голосов
/ 15 февраля 2010

Возможно, попробуйте кнопку "Очистить кэш шаблона" в разделе CF Admin> Caching.

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

Может также попытаться снять отметку со всего под Caching. Примечание: делайте это только для машин разработки !!!

0 голосов
/ 13 февраля 2010

Просто спрашиваю об очевидном: Вы вызываете эти функции из onApplicationStart?

0 голосов
/ 12 февраля 2010

В вашем администраторе Coldfusion у вас включено (проверено) одно из следующих действий?

Кэширование> Trusted Cache

Кэширование> Сохранить файлы классов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...