¿Cómo puedo lavar mediante programación la caché de Magento?

23

Estoy automatizando las configuraciones de lanzamiento arrancando Mage en varios scripts de lanzamiento. Al final de los scripts, necesito vaciar el caché de Magento.

¿Hay alguna manera de vaciar el caché usando una de las Mageclases o métodos?

STW
fuente
1
intente esto: Mage :: app () -> cleanCache () o Mage :: app () -> getCacheInstance () -> flush ();
Stefan Gregori

Respuestas:

25

Intente el siguiente código para vaciar el caché mediante programación

Mage::app()->cleanCache()

o

Mage::app()->getCacheInstance()->flush(); 
Stefan Gregori
fuente
40

Si realmente quisieras, también podrías limpiar uno o más tipos de caché. Así es como lo hace la sección de administración. DebajoMage_Adminhtml_CacheController::massRefreshAction

Puedes ver que recorre todos los parámetros types y llama a lo siguiente

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

Los tipos posibles son los siguientes:

  1. config
  2. diseño
  3. block_html
  4. traducir
  5. colecciones
  6. cada
  7. config_api
  8. config_api2
  9. página completa

Y estos pueden devolverse llamando Mage::app()->getCacheInstance()->getTypes()

David modales
fuente
3
Después de haber fallado con la limpieza de caché mediante programación, este comentario es más útil que la respuesta seleccionada. Como es importante llamar a dispatchEvent, mis ESI de Varnish no se borraron hasta que agregué la llamada dispatchEvent. (Lo que, por supuesto, permitirá que otros módulos activen su código en consecuencia)
Barry Carlyon
6

Un script externo rápido para borrar todo el caché:

<?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
fuente
3

Nuestro podríamos usar n98-magerun . Especialmente porque nunca debe vaciar el caché durante la ejecución de los scripts de implementación. También mire el sys:setup:incrementalsubcomando para una ejecución más controlada de los scripts de configuración de Magento.

Melvyn
fuente
¿Puede proporcionar alguna información adicional sobre su declaración "Especialmente porque nunca debe vaciar el caché durante la ejecución de los scripts de implementación"?
STW
1
Magento tiene una función que ejecuta actualizaciones automáticamente. Esto se activa cuando la caché de configuración tiene que ser reconstruida. A menos que necesite específicamente esa característica y la codifique cuidadosamente, debe introducir un proceso paralelo que usted o sus colegas no hayan previsto.
Melvyn
1

Si realmente necesita borrar todos los almacenamientos de caché, use el siguiente código,

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

Aquí la función Flush llama a la funcionalidad de caché magento predeterminada. Si necesita más aclaraciones, consulte la siguiente url.

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

Pasupathi Thangavel
fuente