Magento 1: auto-activar la caché

Magento funcionamiento interno

Aquí estoy de nuevo compartiendo un truco sobre Magento 1. Magento 1 es un proyecto Open Source, con lo que navegando por el código fuente, o preguntando por foros por Internet que podemos llegar a encontrar cómo hacer esto.

Pero aquí que lo dejo porque me ha costado un poco encontrar cómo hacerlo, y ha sido útil como técnica de mejora de proyectos en Magento 1. Digo que me ha sido útil ya que a veces, me he encontrado los proyectos sin activar la caché. Esto hacía que los proyectos corrieran mucho más lento, ya que Magento en general, sin la caché activada, es realmente lento.

Así que con este sencillo script corriendo cada X tiempo, te puedes quedar tranquilo de que estará la caché de Magento activada.

Al grano, el código fuente

Como buen fan del Open Source, y siguiendo con la filosofía del Open Source de Magento:

        $updating = false;
        $cacheTypes = Mage::app()->getCacheInstance()->getTypes();
        foreach ($cacheTypes as $key => $cacheType) {
            if ($trace) {
                echo $cacheType->getId().' '.($cacheType->getStatus() ? 'Habilitada' : 'Deshabilitada').PHP_EOL;
            }
            $allTypeCodes[$cacheType->getId()] = 1;
            if (empty($cacheType->getStatus())) {
                $updating = true;
                if ($trace) {
                    echo '..encontrada deshabilitada, vamos a habilitar!'.PHP_EOL;
                }
            }
        }

        if ($updating) {
            Mage::app()->saveUseCache($allTypeCodes);
        }

Dándole un par de vueltas y pruebas al script, podemos encontrar que toda la caché se puede configurar usando el array $allTypeCodes y la función saveUseCache. Dependiendo de cómo configuremos el array que luego podremos activar o desactivar cachés.

Si refinamos un poco el script anterior, lo podemos poner en un archivo del proyecto. Podemos ponerlo dentro de un módulo de Magento, quizá como tarea automática. Yo he cogido la manía de crear un directorio extra/ con todos estos scripts de pruebas, antes incluso de meter los códigos dentro de los módulos.

De esta manera creo el script extra/check_cache.php siguiente:

<?php
require_once __DIR__.'/../web/app/Mage.php';

Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);

$trace = true;
$updating = false;
$cacheTypes = Mage::app()->getCacheInstance()->getTypes();
foreach ($cacheTypes as $key => $cacheType) {
    if ($trace) {
        echo 'ID de caché: '.$cacheType->getId().' => '.($cacheType->getStatus() ? 'Habilitada' : 'Deshabilitada').PHP_EOL;
    }
    $allTypeCodes[$cacheType->getId()] = 1;
    if (empty($cacheType->getStatus())) {
        $updating = true;
        if ($trace) {
            echo '..encontrada deshabilitada, vamos a habilitar!'.PHP_EOL;
        }
    }
}

var_dump($allTypeCodes);

if ($updating) {
    Mage::app()->saveUseCache($allTypeCodes);
}

Para ejecutarlo desde línea de comandos así:

$ php extra/check_cache.php

Entonces podemos tener un resultado por pantalla como el siguiente:

ID de caché: config => Habilitada
ID de caché: layout => Habilitada
ID de caché: block_html => Habilitada
ID de caché: translate => Habilitada
ID de caché: collections => Habilitada
ID de caché: eav => Habilitada
ID de caché: config_api => Habilitada
ID de caché: config_api2 => Habilitada
ID de caché: turpentine_pages => Habilitada
ID de caché: turpentine_esi_blocks => Habilitada
/home/jaime/.. .../extra/check_cache.php:22:
array(10) {
  'config' =>
  int(1)
  'layout' =>
  int(1)
  'block_html' =>
  int(1)
  'translate' =>
  int(1)
  'collections' =>
  int(1)
  'eav' =>
  int(1)
  'config_api' =>
  int(1)
  'config_api2' =>
  int(1)
  'turpentine_pages' =>
  int(1)
  'turpentine_esi_blocks' =>
  int(1)
}

Ya sólo tenemos que poner a 0 o 1 el array, y con esto que habilitamos o deshabilitamos cachés en Magento 1, según lo que necesitemos..

Compartir..

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *