Tipi di blocco non validi


9

Ricevo il seguente messaggio di errore un paio di volte al giorno e la mia conoscenza del funzionamento interno di Magento CE 1.9.0.1 è abbastanza sottile che non so se questo è normale, un comportamento consultivo da parte di Magento o se lo dice io ho un brutto problema.

Ecco il messaggio:

Uno o più tipi di cache sono invalidati: blocca l'output HTML. Fare clic qui per accedere a Gestione cache e aggiornare i tipi di cache.

L'aggiornamento di quella particolare cache risolve il problema per un paio d'ore circa.

Al momento non sto modificando layout, prodotti, ecc. Niente affatto.

Cosa c'è di sbagliato e come posso correggerlo?


Ricevo questo ogni giorno quando mi sveglio e accedo a Magento v1.9.2.2 - Uno o più tipi di cache sono invalidati: blocca l'output HTML. Fare clic qui per accedere a Gestione cache e aggiornare i tipi di cache. Non l'ho mai usato nelle versioni precedenti a meno che non stavo effettivamente facendo qualcosa. È una specie di bug?
Neal Hart,

Risposte:


6

Innanzitutto è importante capire che questo non è un errore, è semplicemente una notifica.

Ci possono essere una miriade di ragioni per cui una cache a blocchi non è valida dagli aggiornamenti ai prodotti, dalle modifiche alle regole del prezzo del catalogo e dalle estensioni di terze parti. Anche l'esecuzione di cronjobs può far invalidare anche le cache dei blocchi.

Sono disponibili alcune estensioni di comunità (elencate di seguito) che aggiorneranno i blocchi man mano che vengono invalidati.

https://github.com/tomasinchoo/Inchoo_InvalidatedBlockCacheFix

https://github.com/mklooss/Loewenstark_InvalidCache


2

Questo è un errore.

Esiste un problema di lavoro CRON (post 1.9.?) Che esegue e invalida la cache HTML, che produce problemi (ad esempio, nel mio caso, non è stato possibile riportare lo sconto sul prezzo nel carrello, quindi un cliente verrebbe addebitato un importo errato).

Non dovremmo aver bisogno di eseguire un'estensione per risolvere un problema che è stato introdotto!


Sto ottenendo lo stesso identico comportamento su CE 1.9.2.2, ogni mattina l'output HTML di Blocks deve essere aggiornato e ho pensato a un problema con cron job. @Brian potresti fornire ulteriori dettagli su quell'attività cron?
Marc,

Penso che tu stia pensando al contrario: non è stato che il "prezzo non è stato trasferito nel carrello", ma piuttosto che il prezzo nella pagina è stato aggiunto alla cache prima dell'aggiornamento, quindi la cache era errata , mentre il prezzo corretto è indicato nel carrello. Per l'acquirente, probabilmente, pensano che il prezzo più basso sia quello "corretto".
Eric Seastrand,

@Brian, Potresti fornire ulteriori dettagli sull'attività cron che stava invalidando i tuoi blocchi?
Haim,

0

Questa è un'operazione standard di Magento da 1.6.xx e successive. Qualcosa causa sempre un'annullamento casuale della cache del blocco html.

Ho appena impostato un osservatore che si avvia su un cron job periodico, impostando qualsiasi intervallo sembra appropriato.

Observer.php

<?php

/************************
 * Find invalidated cache types and refresh
 *
 * Set Cron Time for refresh in config.xml
 *
 */

class Fiasco_Rcache_Model_Observer {

    public function refreshCache() {

        try {

            $types = Mage::app()->getCacheInstance()->getInvalidatedTypes();

            foreach($types as $type) {

                Mage::app()->getCacheInstance()->cleanType($type->getId());

            }

            Mage::log('Invalid Cache Types Refreshed');

        } catch (Exception $e) {

            Mage::logException($e);

        }
    }
}

config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Fiasco_Rcache>
            <version>0.5.0</version>
        </Fiasco_Rcache>
    </modules>
    <global>
        <models>
            <refresh_cache>
                <class>Fiasco_Rcache_Model</class>
            </refresh_cache>
        </models>
    </global>
    <crontab>
        <jobs>
            <refresh_cache>
                <!-- Min Hour Day Month DoW -->
                <schedule><cron_expr>0 */3 * * *</cron_expr></schedule>
                <run><model>refresh_cache/observer::refreshCache</model></run>
            </refresh_cache>
        </jobs>
    </crontab>
</config>

0

Questo indicatore di cache non valido è probabilmente correlato al cron di DailyCatalogUpdate. È responsabile dell'applicazione / aggiornamento delle regole del catalogo.

Una volta al giorno, chiama Mage::getSingleton('catalogrule/rule')->applyAll();.

All'interno del codice di questo metodo, c'è una chiamata a $this->_invalidateCache(), che a sua volta chiama $this->_app->getCacheInstance()->invalidateType()nella block_htmlcache.

Il problema è che invalida la cache senza fare alcun controllo per determinare se potrebbe effettivamente essere ancora valida. Per me, questo è meglio che non invalidare la cache, perché allora puoi almeno sapere che potrebbe non essere valido e utilizzare qualcosa di simile a quello che Fiasco Labs ha suggerito di svuotare i dati (potenzialmente) non memorizzati nella cache.

Diventa quindi una decisione se si desidera errore dal lato di:

A) Mostrare ai clienti il ​​prezzo sbagliato, ma mantenendo la cache e avendo quindi meno carico sul server

o

B) Mostrare il prezzo corretto, ma avere più errori nella cache e quindi un carico del server più elevato.

Ci sono due cose difficili nell'informatica: denominare le cose e invalidare la cache .


0

vedi qui la soluzione: https://magento.stackexchange.com/a/72687

Cambia sostanzialmente la funzione dailyCatalogUpdate da app / code / local / Mage / CatalogRule / Model / Observer.php a

        $collection = Mage::getResourceModel('catalogrule/rule_collection')
        ->addFieldToFilter('is_active', array('neq' => 0));
    if ($collection->getSize() == 0) {
        return $this;
    }
    parent::dailyCatalogUpdate($observer);
    $types = Mage::getConfig()->getNode('global/catalogrule/related_cache_types')->asArray();
    foreach (array_keys($types) as $type) {
        Mage::app()->getCacheInstance()->cleanType($type);
    }
    return $this;
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.