Como liberar programaticamente o cache do Magento?

23

Estou automatizando as configurações de lançamento, inicializando o Mage em vários scripts de lançamento. No final dos scripts, preciso liberar o cache do Magento.

Existe uma maneira de liberar o cache usando uma das Mageclasses ou métodos?

STW
fonte
1
tente isso: Mage :: app () -> cleanCache () ou Mage :: app () -> getCacheInstance () -> flush ();
Stefan Gregori

Respostas:

25

Por favor, tente o código a seguir para liberar o cache programaticamente

Mage::app()->cleanCache()

ou

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

Se você realmente quisesse, também poderia limpar apenas um ou mais tipos de cache. É assim que a seção do administrador faz isso. SobMage_Adminhtml_CacheController::massRefreshAction

Você pode ver que ele percorre todos os parâmetros typese chama o seguinte

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

Os tipos possíveis são os seguintes:

  1. config
  2. disposição
  3. block_html
  4. traduzir
  5. coleções
  6. eav
  7. config_api
  8. config_api2
  9. página inteira

E estes podem ser retornados chamando Mage::app()->getCacheInstance()->getTypes()

David Manners
fonte
3
Tendo andado com a limpeza de cache programaticamente, esse comentário é mais útil que a resposta selecionada. Como é importante chamar o dispatchEvent, meus ESIs de verniz não estavam sendo limpos até eu adicionar a chamada de dispatchEvent. (Que, naturalmente, permitir que outros módulos para disparar seu código em conformidade)
Barry Carlyon
6

Um script externo rápido para limpar todo o cache:

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

Nós poderíamos usar o n98-magerun . Especialmente porque você nunca deve liberar o cache durante a execução de scripts de implantação. Veja também o sys:setup:incrementalsubcomando para uma execução mais controlada dos scripts de instalação do Magento.

Melvyn
fonte
Você pode fornecer informações adicionais sobre sua declaração "Especialmente porque você nunca deve liberar o cache durante a execução de scripts de implantação"?
STW
1
Magento tem um recurso que executa atualizações automaticamente. Isso é acionado quando o cache de configuração precisa ser reconstruído. A menos que você precise especificamente desse recurso e o codifique cuidadosamente, você apresenta um processo paralelo que você ou seus colegas podem não ter previsto.
Melvyn
1

Se você realmente precisar limpar todos os armazenamentos de cache, use o código a seguir,

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

Aqui a função Flush chama a funcionalidade padrão do cache magento. Se você precisar de mais esclarecimentos, consulte o seguinte URL.

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

Pasupathi Thangavel
fonte