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?

STW
quelle
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(); 
Stefan Gregori
quelle
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()

David Manners
quelle
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();
}
Renon Stewart
quelle
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.

Melvyn
quelle
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
1

Wenn Sie wirklich alle Cache-Speicher löschen müssen, geben Sie den folgenden Code ein:

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

Hier ruft die Flush-Funktion die Standard-Magento-Cache-Funktionalität auf. Wenn Sie weitere Erläuterungen benötigen, beziehen Sie sich auf die folgende URL.

/programming/15028159/magento-flush-cache-storage

Pasupathi Thangavel
quelle