Ungültige Blocktypen

9

Ich erhalte einige Male am Tag die folgende Fehlermeldung, und mein Wissen über das Innenleben von Magento CE 1.9.0.1 ist dünn genug, dass ich nicht weiß, ob dies ein normales Beratungsverhalten von Magento ist oder ob es aussagekräftig ist Ich habe ein schlimmes Problem.

Hier ist die Nachricht:

Einer oder mehrere der Cache-Typen sind ungültig: Blockiert die HTML-Ausgabe. Klicken Sie hier, um zur Cache-Verwaltung zu gelangen und die Cache-Typen zu aktualisieren.

Durch das Aktualisieren dieses bestimmten Caches wird das Problem für etwa ein paar Stunden behoben.

Ich bearbeite derzeit keine Layouts, Produkte usw., überhaupt nichts.

Was ist falsch und wie kann ich es korrigieren?

Dave G.
quelle
Ich erhalte dies jeden Tag, wenn ich aufwache und mich bei Magento v1.9.2.2 anmelde - Einer oder mehrere der Cache-Typen sind ungültig: Blockiert die HTML-Ausgabe. Klicken Sie hier, um zur Cache-Verwaltung zu gelangen und die Cache-Typen zu aktualisieren. Ich habe dies in früheren Versionen nie bekommen, es sei denn, ich habe tatsächlich etwas getan. Ist das eine Art Fehler?
Neal Hart

Antworten:

6

Zunächst ist es wichtig zu verstehen, dass dies kein Fehler ist, sondern lediglich eine Benachrichtigung.

Es kann unzählige Gründe geben, warum ein Blockcache aufgrund von Aktualisierungen von Produkten, Änderungen der Katalogpreisregeln und Erweiterungen von Drittanbietern ungültig wird. Auch das Ausführen von Cronjobs kann dazu führen, dass Block-Caches ebenfalls ungültig werden.

Es sind einige Community-Erweiterungen verfügbar (siehe unten), die Ihre Blöcke aktualisieren, sobald sie ungültig werden.

https://github.com/tomasinchoo/Inchoo_InvalidatedBlockCacheFix

https://github.com/mklooss/Loewenstark_InvalidCache

Eirik
quelle
2

Dies ist ein Fehler.

Es gibt ein CRON-Jobproblem (nach 1.9.?), Das den HTML-Cache ausführt und ungültig macht, was zu Problemen führt (z. B. in meinem Fall konnte der Preisnachlass nicht in den Warenkorb übertragen werden - daher würde einem Kunden ein falscher Betrag berechnet).

Wir sollten keine Erweiterung ausführen müssen, um ein eingeführtes Problem zu beheben!

Brian Milnes
quelle
Ich erhalte genau das gleiche Verhalten in CE 1.9.2.2. Jeden Morgen muss die HTML-Ausgabe von Blocks aktualisiert und über ein Cron-Jobproblem nachgedacht werden. @Brian könntest du weitere Details zu dieser Cron-Aufgabe geben?
Marc
Ich denke, dass Sie jedoch rückwärts denken: Es war nicht so, dass der "Preis nicht in den Warenkorb übertragen wurde", sondern dass der Preis auf der Seite dem Cache hinzugefügt wurde, bevor die Aktualisierung ausgeführt wurde, und daher war der Cache falsch , während der korrekte Preis im Warenkorb angezeigt wird. Für den Käufer denken sie jedoch wahrscheinlich, dass der niedrigere Preis der "richtige" ist.
Eric Seastrand
@Brian, Könnten Sie weitere Details zu der Cron-Aufgabe angeben, die Ihre Blöcke ungültig gemacht hat?
Haim
0

Dies ist eine Standard-Magento-Operation ab 1.6.xx und höher. Etwas verursacht immer eine zufällige Ungültigmachung des HTML-Blockcaches.

Ich habe gerade einen Beobachter eingerichtet, der bei einem regelmäßigen Cron-Job ausgelöst wird, und das Intervall festgelegt, das angemessen erscheint.

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>
Fiasko-Labore
quelle
0

Dieser ungültige Cache-Indikator hängt wahrscheinlich mit dem Cron "dailyCatalogUpdate" zusammen. Es ist für das Anwenden / Aktualisieren von Katalogregeln verantwortlich.

Einmal am Tag ruft es an Mage::getSingleton('catalogrule/rule')->applyAll();.

Im Code dieser Methode gibt es einen Aufruf von $this->_invalidateCache(), der wiederum $this->_app->getCacheInstance()->invalidateType()den block_htmlCache aufruft .

Das Problem ist, dass der Cache ungültig wird, ohne dass überprüft wird, ob er tatsächlich noch gültig ist. Für mich ist dies besser, als den Cache nicht ungültig zu machen, denn dann können Sie zumindest wissen, dass er ungültig sein könnte, und so etwas wie das verwenden, was Fiasco Labs vorgeschlagen hat , um die (möglicherweise) ungültigen zwischengespeicherten Daten zu leeren.

Es wird dann eine Entscheidung darüber, ob Sie Fehler auf der Seite von:

A) Den Kunden den falschen Preis anzeigen, aber den Cache behalten und damit weniger Serverlast haben

oder

B) Anzeigen des korrekten Preises, jedoch mit mehr Cache-Fehlern und daher höherer Serverlast.

In der Informatik gibt es zwei schwierige Dinge: das Benennen von Dingen und die Ungültigmachung des Caches .

Eric Seastrand
quelle
0

Hier finden Sie die Lösung: /magento//a/72687

Ändern Sie grundsätzlich die Funktion dailyCatalogUpdate von app / code / local / Mage / CatalogRule / Model / Observer.php in

        $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;
MeHigh
quelle