무효화 된 블록 유형


9

하루에 몇 번 다음과 같은 오류 메시지가 표시되고 Magento CE 1.9.0.1의 내부 작동에 대한 지식이 얇아서 이것이 Magento의 정상적인 행동인지 조언인지 알 수 없습니다. 나는 나쁜 문제가있다.

메시지는 다음과 같습니다.

하나 이상의 캐시 유형이 무효화되었습니다. HTML 출력을 차단합니다. 캐시 관리로 이동하여 캐시 유형을 새로 고치려면 여기를 클릭하십시오.

특정 캐시를 새로 고치면 문제가 몇 시간 정도 사라집니다.

현재 레이아웃, 제품 등을 전혀 편집하고 있지 않습니다.

무엇이 잘못되었으며 어떻게 해결할 수 있습니까?


매일 Magento v1.9.2.2에서 깨어나 로그인 할 때이 정보를 얻습니다. 하나 이상의 캐시 유형이 무효화되었습니다. HTML 출력을 차단합니다. 캐시 관리로 이동하여 캐시 유형을 새로 고치려면 여기를 클릭하십시오. 실제로 무언가를하지 않는 한 이전 버전에서 이것을 사용하지 못했습니다. 이것은 일종의 버그입니까?
Neal Hart

답변:


6

먼저 이것은 오류가 아니라 단지 알림이라는 것을 이해하는 것이 중요합니다.

블록 캐시가 제품 업데이트, 카탈로그 가격 규칙 변경 및 타사 확장에서 무효화되는 많은 이유가있을 수 있습니다. 또한 cronjob을 실행하면 블록 캐시도 무효화 될 수 있습니다.

무효화됨에 따라 블록을 새로 고칠 수있는 일부 커뮤니티 확장 (아래에 나열)이 있습니다.

https://github.com/tomasinchoo/Inchoo_InvalidatedBlockCacheFix

https://github.com/mklooss/Loewenstark_InvalidCache


2

이것은 오류입니다.

HTML 캐시를 실행하고 무효화하는 CRON 작업 문제 (1.9.?)가 있으며, 이로 인해 문제가 발생합니다.

소개 된 문제를 해결하기 위해 확장 프로그램을 실행할 필요는 없습니다!


CE 1.9.2.2에서도 똑같은 동작이 발생합니다. 매일 아침 HTML 출력을 새로 고쳐야하며 cron 작업 문제에 대해 생각했습니다. @ 브라이언 당신은 그 cron 작업에 대한 자세한 내용을 줄 수 있습니까?
Marc

나는 당신이 거꾸로 생각하고 있다고 생각합니다. "가격이 바구니에 넘겨지지 않았다"는 것이 아니라 페이지의 가격이 새로 고침이 실행되기 전에 캐시에 추가 되었기 때문에 캐시가 잘못되었습니다 장바구니에 정확한 가격이 표시됩니다. 그러나 구매자에게는 가격이 더 낮은 것이 "올바른"것이라고 생각할 것입니다.
Eric Seastrand

@Brian, 블록을 무효화 한 cron 작업에 대한 자세한 내용을 알려 주시겠습니까?
Haim

0

이것은 1.6.xx 이상의 표준 Magento 작업입니다. 무언가가 항상 임의의 html 블록 캐시 무효화를 유발합니다.

나는 주기적 cron 작업에서 발생하는 관찰자를 설정하고 적절한 간격을 설정했습니다.

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

이 무효화 된 캐시 표시기는 아마도 dailyCatalogUpdate cron과 관련이 있습니다. 카탈로그 규칙을 적용 / 새로 고치기위한 책임이 있습니다.

하루에 한 번 호출합니다 Mage::getSingleton('catalogrule/rule')->applyAll();.

이 메소드의 코드에는에 대한 호출이 있으며 $this->_invalidateCache(),이 호출 $this->_app->getCacheInstance()->invalidateType()block_html캐시 에 대한 호출 입니다 .

문제는 실제로 유효한지 확인하기 위해 검사를 수행하지 않고 캐시를 무효화한다는 것입니다. 나에게 이것은 캐시를 무효화 하지 않는 것보다 낫습니다 . 왜냐하면 적어도 무효가 될 수 있다는 것을 알 수 있고 Fiasco Labs가 제안한 것과 같은 것을 사용 하여 (잠재적으로) 유효하지 않은 캐시 데이터를 플러시하기 때문입니다.

그러면 다음과 같은 측면에서 오류를 낼 것인지에 대한 결정이됩니다.

A) 고객에게 잘못된 가격을 제시하지만 캐시를 유지하므로 서버로드가 줄어 듭니다.

또는

B) 정확한 가격을 보여 주지만 캐시 미스가 더 많으므로 서버로드가 더 높습니다.

컴퓨터 과학에는 두 가지 어려운 점이 있습니다. 이름 지정과 캐시 무효화 .


0

여기에 솔루션을 참조하십시오 : https://magento.stackexchange.com/a/72687

기본적으로 dailyCatalogUpdate 기능을 app / code / local / Mage / CatalogRule / Model / Observer.php에서

        $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;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.