无效的块类型


9

我每天几次收到以下错误消息,并且我对Magento CE 1.9.0.1的内部运行情况了解得很薄,以至于我不知道这是否正常,Magento的建议行为或是否在说明我,我有一个严重的问题。

这是消息:

一种或多种缓存类型无效:阻止HTML输出。单击此处转到“缓存管理”并刷新缓存类型。

刷新特定的缓存会使问题消失几个小时左右。

我目前不编辑布局,产品等,什么都没有。

有什么问题,我该如何纠正?


我每天醒来并登录Magento v1.9.2.2时都会收到此消息-一种或多种缓存类型无效:阻止HTML输出。单击此处转到“缓存管理”并刷新缓存类型。除非我实际上在做某事,否则我从来没有在较早的版本上得到它。这是某种错误吗?
尼尔·哈特

Answers:



2

这是一个错误。

有一个CRON作业问题(1.9版后?)运行并导致HTML缓存失效,从而产生问题(例如,在我的情况下,未能将价格折扣延续到购物篮中-因此将向客户收取错误的金额)。

我们不需要运行扩展来解决已引入的问题!


我在CE 1.9.2.2上得到了完全相同的行为,每天早上都需要刷新Blocks HTML输出,并考虑到cron作业问题。@Brian您可以提供有关该Cron任务的更多详细信息吗?
Marc

我认为您正在向后思考:这不是“价格没有转移到篮子里”,而是在刷新运行之前将页面上的价格添加到了缓存中,因此缓存是错误的,而正确的价格显示在购物车中。但是对于买家而言,他们可能认为较低的价格是“正确的”价格。
埃里克·海斯特兰德'16

@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;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.