Unieważnione typy bloków

9

Kilka razy dziennie otrzymuję następujący komunikat o błędzie, a moja wiedza na temat wewnętrznego działania Magento CE 1.9.0.1 jest na tyle niewielka, że ​​nie wiem, czy jest to normalne, doradcze zachowanie Magento, czy też mówi ja mam zły problem.

Oto wiadomość:

Jeden lub więcej typów buforów jest unieważnionych: Blokuje wyjście HTML. Kliknij tutaj, aby przejść do zarządzania pamięcią podręczną i odświeżyć typy pamięci podręcznej.

Odświeżenie tego konkretnego bufora powoduje, że problem zniknie na kilka godzin.

Obecnie nie edytuję układów, produktów itp., W ogóle nic.

Co jest nie tak i jak mogę to naprawić?

Dave G.
źródło
Dostaję to każdego dnia, gdy budzę się i loguję na Magento v1.9.2.2 - Jeden lub więcej typów buforów jest unieważnionych: Blokuje wyjście HTML. Kliknij tutaj, aby przejść do zarządzania pamięcią podręczną i odświeżyć typy pamięci podręcznej. Nigdy nie otrzymywałem tego we wcześniejszych wersjach, chyba że faktycznie coś robiłem. Czy to jakiś błąd?
Neal Hart

Odpowiedzi:

6

Po pierwsze, ważne jest, aby zrozumieć, że nie jest to błąd, a jedynie powiadomienie.

Istnieje wiele powodów, dla których pamięć podręczna bloków jest nieważna z powodu aktualizacji produktów, zmian reguł cen katalogowych i rozszerzeń innych firm. Również uruchamianie cronjobs może spowodować unieważnienie pamięci podręcznych bloków.

Dostępnych jest kilka rozszerzeń społeczności (wymienionych poniżej), które odświeżą bloki, gdy zostaną unieważnione.

https://github.com/tomasinchoo/Inchoo_InvalidatedBlockCacheFix

https://github.com/mklooss/Loewenstark_InvalidCache

Eirik
źródło
2

To jest błąd.

Wystąpił problem z zadaniem CRON (post 1.9.?), Który uruchamia i unieważnia pamięć podręczną HTML, co powoduje problemy (np. W moim przypadku nie udało się przenieść rabatu cenowego do koszyka - więc klient zostałby obciążony niewłaściwą kwotą).

Nie musimy uruchamiać rozszerzenia, aby naprawić wprowadzony problem!

Brian Milnes
źródło
Dostaję dokładnie takie samo zachowanie w CE 1.9.2.2, każdego ranka Bloki wyjściowe HTML wymagają odświeżenia i pomyślałem o problemie z cronem. @Brian, czy możesz podać dalsze szczegóły dotyczące tego zadania cron?
Marc
Myślę, że myślisz wstecz: nie chodziło o to, że „cena nie została przeniesiona do koszyka”, ale o to, że cena na stronie została dodana do pamięci podręcznej przed uruchomieniem odświeżania, a zatem pamięć podręczna była błędna , podczas gdy prawidłowa cena pokazana w koszyku. Jednak dla nabywcy prawdopodobnie myślą, że cena, która jest niższa, jest „poprawna”.
Eric Seastrand
@Brian, Czy możesz podać dalsze szczegóły dotyczące zadania cron, które unieważniało twoje bloki?
Haim
0

Jest to standardowa operacja Magento od wersji 1.6.xx i nowszych. Coś zawsze powoduje losowe unieważnienie pamięci podręcznej bloku HTML.

Właśnie ustawiłem obserwatora, który wystrzeliwuje okresowe zadanie crona, ustawiając dowolny interwał, który wydaje się odpowiedni.

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>
Fiasco Labs
źródło
0

Ten unieważniony wskaźnik pamięci podręcznej jest prawdopodobnie związany z cronem DailyCatalogUpdate. Odpowiada za stosowanie / odświeżanie reguł katalogu.

Raz dziennie dzwoni Mage::getSingleton('catalogrule/rule')->applyAll();.

Wewnątrz kodu tej metody, jest wywołanie $this->_invalidateCache(), co z kolei wywołuje $this->_app->getCacheInstance()->invalidateType()w block_htmlpamięci podręcznej.

Problem polega na tym, że unieważnia pamięć podręczną bez przeprowadzania jakichkolwiek kontroli w celu ustalenia, czy może ona nadal być poprawna. Dla mnie jest to lepsze niż nie unieważnianie pamięci podręcznej, ponieważ wtedy możesz przynajmniej wiedzieć, że może ona być niepoprawna i użyć czegoś takiego, jak sugerowane przez Fiasco Labs, aby opróżnić (potencjalnie) nieprawidłowe dane w pamięci podręcznej.

Następnie staje się decyzja, czy chcesz popełnić błąd po stronie:

Odp.) Pokazanie klientom niewłaściwej ceny, ale utrzymanie pamięci podręcznej, a tym samym zmniejszenie obciążenia serwera

lub

B) Wyświetlanie prawidłowej ceny, ale więcej braków pamięci podręcznej, a zatem większe obciążenie serwera.

W informatyce istnieją dwie trudne rzeczy: nazewnictwo i unieważnianie pamięci podręcznej .

Eric Seastrand
źródło
0

zobacz tutaj rozwiązanie: https://magento.stackexchange.com/a/72687

Zasadniczo zmień funkcję dailyCatalogUpdate z app / code / local / Mage / CatalogRule / Model / Observer.php na

        $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
źródło