Come posso scaricare a livello di codice Magento's Cache?


23

Sto automatizzando le configurazioni di rilascio avviando Mage in diversi script di rilascio. Alla fine degli script, devo svuotare la cache di Magento.

C'è un modo per svuotare la cache usando una delle Mageclassi o metodi?


1
prova questo: Mage :: app () -> cleanCache () o Mage :: app () -> getCacheInstance () -> flush ();
Stefan Gregori,

Risposte:


25

Prova il codice seguente per svuotare la cache a livello di codice

Mage::app()->cleanCache()

o

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

40

Se lo desideri, puoi anche pulire solo uno o più tipi di cache. Questo è in realtà il modo in cui la sezione admin lo fa. SottoMage_Adminhtml_CacheController::massRefreshAction

Puoi vedere che scorre attraverso tutti i parametri typese chiama quanto segue

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

I tipi possibili sono i seguenti:

  1. config
  2. disposizione
  3. block_html
  4. tradurre
  5. collezioni
  6. EAV
  7. config_api
  8. config_api2
  9. pagina intera

E questi possono essere restituiti chiamando Mage::app()->getCacheInstance()->getTypes()


3
Essendo stato sbrigativo con la cancellazione della cache a livello di programmazione questo commento è più utile della risposta selezionata. Dato che è importante chiamare il dispatchEvent, le mie ESI di Varnish non si sono cancellate fino a quando non ho aggiunto la chiamata dispatchEvent. (Che ovviamente consentirà ad altri moduli di attivare il loro codice di conseguenza)
Barry Carlyon,

6

Un rapido script esterno per cancellare tutta la 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();
}

3

Potremmo usare n98-magerun . Soprattutto dal momento che non si dovrebbe mai svuotare la cache durante l'esecuzione degli script di distribuzione. Guarda anche il sys:setup:incrementalsottocomando per un'esecuzione più controllata degli script di installazione di Magento.


Puoi fornire ulteriori informazioni sulla tua dichiarazione "Soprattutto perché non dovresti mai svuotare la cache durante l'esecuzione degli script di distribuzione"?
STW,

1
Magento ha una funzione che esegue automaticamente gli aggiornamenti. Questo viene attivato quando la cache di configurazione deve essere ricostruita. A meno che tu non abbia specificamente bisogno di quella funzione e ti scriva attentamente il codice, si introduce un processo parallelo che tu o i tuoi colleghi potreste non aver previsto.
Melvyn,

1

Se hai davvero bisogno di cancellare tutti gli archivi della cache significa usare il seguente codice,

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

Qui la funzione Flush chiama la funzionalità cache magento predefinita, se hai bisogno di ulteriori chiarimenti significa fare riferimento al seguente URL.

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.