2010-04-19 2 views
20

Итак, я открыл кеш-шлюзы в своем приложении Cakephp, и теперь я хочу их закрыть ...Как полностью отключить кеширование в CakePHP?

Я сделал почти все, что могу: удалю все файлы в папке tmp (но не в папках) повернул «Cache.disable» в файл core.php в моем приложении, попробовал очистить кеш из некоторых контроллеров с помощью clearCache() и Cache :: clear() (но я подозреваю, что это не работает, потому что это не загрузка контроллер - из-за кэширования).

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

+0

Ну, вы пробовали очистить кеш браузера? Также как вы оцениваете, кэширует ли ваше приложение? Имейте в виду, что даже при кэшировании/tmp/cache все еще будут файлы, поскольку модели всегда кэшируются. –

+0

Способ, которым я пытался оценить, является ли это кеширование, вставив привет в представление и посмотрев, появляется ли он после перезагрузки и, да, опустошение кеша браузера. В качестве побочного примечания я выяснил эту проблему, но теперь я понятия не имею, как с этим бороться: файл кеша представления сохраняет всплытие после каждого ручного удаления, которое я делаю ... хотя у меня есть каждая функция кеша, которую я могу найти отключено. почему он все еще кеширует представление, несмотря на это? –

+0

Возможно, попробуйте с отладчиком: 0 настроен в конфиге, так как я знаю, что отладка: 2 будет регенерировать все по каждому запросу. В противном случае, возможно, файл доступен только для чтения, или ваш ftp-клиент не сообщает об этой папке правильно? Просто мысль :) –

ответ

12

Чтобы исключить кэширование в браузере в качестве основной причины, вы можете попробовать добавить следующие строки:

header('Cache-Control: no-store, private, no-cache, must-revalidate');     // HTTP/1.1 
header('Cache-Control: pre-check=0, post-check=0, max-age=0, max-stale = 0', false); // HTTP/1.1 
header('Pragma: public'); 
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');          // Date in the past 
header('Expires: 0', false); 
header('Last-Modified: '.gmdate('D, d M Y H:i:s') . ' GMT'); 
header('Pragma: no-cache'); 

Сочетание всех этих очистки кэша HTTP заголовки, по моему опыту, работал во всех браузерах, и обошел некоторые очень агрессивные прокси-серверы кэширования.

+0

это работает для меня, спасибо! – zx1986

+0

Где именно я могу добавить эти строки кода? Спасибо заранее. – Maximum86

2

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

Мне пришлось обновить /config/core.php и установить «debug: 2» Это отключает кэширование моих моделей и устраняет мои проблемы.

+0

Выполняет эту задачу, но также имеет непреднамеренный эффект отображения подробных ошибок, операторов SQL и т. Д. На странице. Режим отладки 2 хорош для разработки, режим отладки 0 хорош для производства (общедоступный). Для текущей задачи см. Http://stackoverflow.com/q/5901246, а для объяснения см. Http://stackoverflow.com/a/3118292/216084. –

3

Вид длинного выстрела (плюс эта ветка старая, но о хорошо), но у меня была аналогичная проблема: я не мог заставить IE прекратить кеширование запросов ajax (используя jQuery). После сильной боли и головной боли прост:

$.ajaxSetup({cache:false}); 

сделал трюк. Gotta love IE ...

+3

Если что-то, для IE это хорошо.И это jQuery, а не Cake. – 472084

3

Вы можете посмотреть код вашего контроллера для кеширования некоторых элементов и установить их в false. Это относится к app_controller.php или Controller/AppController.php в зависимости от версии используемого вами торта.

Controller::cacheAction = false 

echo $this->element('latest_comments', array(), array('cache' => false)); 

Вы можете попробовать добавить Controller::disableCache(); в свой контроллер.

+1

Я думаю, что это должен быть элемент 'echo $ this-> ('latest_comments', array(), array ('cache' => false));' –

+0

@RobSawyer Спасибо. Обновленный ответ. – icebreaker

+0

public $ cacheAction = false; для вашего AppController в CakePHP 2 –

Смежные вопросы