Wie kann ich den Magento-Cache programmgesteuert leeren?


23

Ich automatisiere Release-Konfigurationen, indem ich Mage in mehrere Release-Skripte einbinde. Am Ende der Skripte muss ich den Cache von Magento leeren.

Gibt es eine Möglichkeit, den Cache mithilfe einer der MageKlassen oder Methoden zu leeren?


1
Versuchen Sie Folgendes: Mage :: app () -> cleanCache () oder Mage :: app () -> getCacheInstance () -> flush ();
Stefan Gregori

Antworten:


25

Bitte versuchen Sie den folgenden Code, um den Cache programmgesteuert zu leeren

Mage::app()->cleanCache()

oder

Mage::app()->getCacheInstance()->flush(); 

40

Wenn Sie es wirklich wollen, können Sie auch nur einen oder mehrere Cache-Typen bereinigen. So macht es eigentlich der Admin-Bereich. UnterMage_Adminhtml_CacheController::massRefreshAction

Sie können sehen, dass es alle Parameter durchläuft typesund Folgendes aufruft

$tags = Mage::app()->getCacheInstance()->cleanType($type);
Mage::dispatchEvent('adminhtml_cache_refresh_type', array('type' => $type));
$updatedTypes++;

Mögliche Typen sind wie folgt:

  1. config
  2. Layout
  3. block_html
  4. Übersetzen
  5. Sammlungen
  6. eav
  7. config_api
  8. config_api2
  9. volle Seite

Und diese können durch einen Anruf zurückgegeben werden Mage::app()->getCacheInstance()->getTypes()


3
Dieser Kommentar ist nützlicher als die ausgewählte Antwort, da er sich mit dem programmgesteuerten Löschen des Caches beschäftigt hat. Da es wichtig ist, das dispatchEvent aufzurufen, wurden meine Varnish-ESIs erst gelöscht, nachdem ich den dispatchEvent-Aufruf hinzugefügt habe. (Damit können natürlich andere Module ihren Code entsprechend abfeuern)
Barry Carlyon

6

Ein schnelles externes Skript zum Löschen des gesamten Caches:

<?php

require_once './app/Mage.php';
umask(0);
Mage::app('default');
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);

try {
    $allTypes = Mage::app()->useCache();
    foreach($allTypes as $type => $value) {
        Mage::app()->getCacheInstance()->cleanType($type);
        Mage::dispatchEvent('adminhtml_cache_refresh_type', array('type' => $type));
        echo "{$type} </br>";
    }
    echo 'done';
} catch (Exception $e) {
    echo $e->getMessage();
}

3

Unsere wir könnten n98-magerun verwenden . Zumal Sie den Cache während der Ausführung von Deployment-Skripten niemals leeren sollten. Schauen Sie sich auch den sys:setup:incrementalUnterbefehl an, um die Ausführung der Magento-Setup-Skripte zu kontrollieren.


Können Sie einen zusätzlichen Einblick in Ihre Aussage "Insbesondere, weil Sie den Cache während der Ausführung von Bereitstellungsskripten niemals leeren sollten" geben?
STW

1
Magento hat eine Funktion, die automatisch Upgrades ausführt. Dies wird ausgelöst, wenn der Konfigurationscache neu erstellt werden muss. Sofern Sie diese Funktion nicht speziell benötigen und sie nicht sorgfältig codieren, führen Sie einen parallelen Prozess ein, den Sie oder Ihre Kollegen möglicherweise nicht erwartet haben.
Melvyn

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.