2010-04-19 3 views
20

Also öffnete ich das Cache-Tür und Tor in meiner CakePHP App und jetzt will ich sie schließen ...Wie deaktiviere ich das Caching in CakePHP vollständig?

Ich habe so ziemlich alles getan, was ich kann: Löschen Sie alle Dateien im Ordner tmp (aber nicht die Ordner), Habe 'Cache.disable' in der core.php-Datei in meiner App eingeschaltet, habe versucht, den Cache innerhalb einiger Controller mit clearCache() und Cache :: clear() zu löschen (aber ich vermute, dass das nicht funktioniert, weil es nicht geladen wird der Controller - aufgrund der Zwischenspeicherung).

Ich habe meinen Entwicklungsprozess praktisch gestoppt, nur weil das Caching nicht abgestellt wird. Hat jemand Ideen, die ich ausprobieren könnte? Ich fange an zu denken, dass es im Browser oder vielleicht meinem Hosting-Service sein könnte, aber es ist wahrscheinlich nur CakePhp mit mir herumspielen.

+0

Haben Sie versucht, Ihren Browser-Cache zu löschen? Wie beurteilen Sie auch, ob Ihre Anwendung zwischengespeichert wird? Denken Sie daran, dass/tmp/cache auch nach dem Zwischenspeichern immer noch Dateien enthält, da die Modelle immer zwischengespeichert werden. –

+0

Ich habe versucht zu beurteilen, ob es Caching ist, indem Sie ein Hi in eine Ansicht einfügen und sehen, ob es nach einem Neuladen und, ja, einem Leeren des Browser-Caches kommt. Als eine Randnotiz, habe ich das Problem herausgefunden, aber jetzt habe ich keine Ahnung, wie man damit umgehen: die View-Cache-Datei taucht nach jedem manuellen Löschen wieder auf ... obwohl ich jede Cache-Funktion habe finde behindert. Warum speichert es trotzdem die Sichtweise? –

+0

Vielleicht versuche es mit debug: 0 in der config gesetzt, wie ich weiß, dass debug: 2 alles bei jeder Anfrage neu generieren wird. Sonst ist die Datei möglicherweise schreibgeschützt oder Ihr FTP-Client meldet den Ordner nicht korrekt? Nur ein Gedanke :) –

Antwort

12

Um Browser-Caching als Ursache ausschließen, könnten Sie die folgenden Zeilen versuchen Sie:

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'); 

Die Kombination all dieser Cache-Busting-HTTP-Header hat, in meiner Erfahrung, arbeitete in allen Browsern, und hat auch einige sehr aggressive Caching-Proxies bekommen.

+0

es funktioniert für mich, danke! – zx1986

+0

Wo genau kann ich diese Codezeilen hinzufügen? Vielen Dank im Voraus. – Maximum86

2

Ich hatte einmal ein Problem mit dem Modell zwischengespeichert und spiegelt nicht mehr das Schema der Tabelle wider.

Ich musste meine /config/core.php aktualisieren und "debug: 2" setzen Dies deaktiviert das Caching meiner Modelle und behob meine Probleme.

+0

Dies erledigt die Aufgabe, hat aber auch den unbeabsichtigten Effekt, dass detaillierte Fehler, SQL-Anweisungen usw. auf der Seite angezeigt werden. Debug-Modus 2 ist gut für die Entwicklung, Debug-Modus 0 ist gut für die Produktion (öffentliche Ansicht). Für die aktuelle Aufgabe siehe http://stackoverflow.com/q/5901246, und für eine Erklärung siehe http://stackoverflow.com/a/3118292/216084. –

3

Eine Art von einem langen Schuss (plus dieser Thread ist alt, aber oh well), aber ich hatte ein ähnliches Problem: Ich konnte IE nicht beenden Caching AJAX-Anforderungen (mit jQuery). Nach viel Kummer und Kopfschmerzen ein einfaches:

$.ajaxSetup({cache:false}); 

haben den Trick. Gota love IE ...

+3

Wenn überhaupt, ist das eine gute Sache für IE, das zu tun.Und das ist jQuery, nicht Kuchen. – 472084

3

Sie könnten Ihren Controller-Code für einige Elemente zwischenspeichern und sie auf false setzen. Dies gilt für app_controller.php oder Controller/AppController.php, abhängig von der von Ihnen verwendeten Version von Cake.

Controller::cacheAction = false 

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

Sie könnten versuchen, Controller::disableCache(); in Ihrer Controller-Aktion hinzufügen.

+1

Ich denke, es sollte 'echo $ this-> Element ('neueste_comments', array(), array ('cache' => false));' –

+0

@RobSawyer Danke. Aktualisierte Antwort – icebreaker

+0

public $ cacheAction = false; für deinen AppController in CakePHP 2 –

Verwandte Themen