ประเภทบล็อกไม่ถูกต้อง


9

ฉันได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้สองสามครั้งต่อวันและความรู้ของฉันเกี่ยวกับการทำงานภายในของ Magento CE 1.9.0.1 นั้นบางพอที่ฉันไม่รู้ว่านี่เป็นเรื่องปกติพฤติกรรมการให้คำปรึกษาจาก Magento หรือถ้ามันบอก ฉันฉันมีปัญหาที่ไม่ดี

นี่คือข้อความ:

ประเภทแคชอย่างน้อยหนึ่งรายการไม่ถูกต้อง: บล็อกเอาต์พุต HTML คลิกที่นี่เพื่อไปที่การจัดการแคชและรีเฟรชประเภทแคช

การรีเฟรชแคชนั้นทำให้ปัญหาหายไปสองสามชั่วโมงหรือมากกว่านั้น

ฉันยังไม่ได้แก้ไขเลย์เอาต์ผลิตภัณฑ์ ฯลฯ ไม่มีอะไรเลย

มีอะไรผิดปกติและฉันจะแก้ไขได้อย่างไร?


ฉันได้รับสิ่งนี้ทุกวันเมื่อฉันตื่นขึ้นมาและลงชื่อเข้าใช้ Magento v1.9.2.2 - ประเภทแคชอย่างน้อยหนึ่งรายการไม่ถูกต้อง: บล็อกเอาต์พุต HTML คลิกที่นี่เพื่อไปที่การจัดการแคชและรีเฟรชประเภทแคช ฉันไม่เคยชินกับรุ่นก่อนหน้านี้ยกเว้นว่าฉันกำลังทำอะไรอยู่ นี่เป็นข้อผิดพลาดบางอย่างหรือไม่?
Neal Hart

คำตอบ:


6

ก่อนอื่นสิ่งสำคัญคือต้องเข้าใจว่านี่ไม่ใช่ข้อผิดพลาดมันเป็นเพียงการแจ้งเตือน

อาจมีสาเหตุหลายประการที่แคชบล็อกไม่ถูกต้องจากการอัปเดตผลิตภัณฑ์การเปลี่ยนแปลงกฎราคาแคตตาล็อกและส่วนขยายของบุคคลที่สาม นอกจากนี้การใช้ cronjobs ก็สามารถทำให้แคชบล็อกไม่ถูกต้องเช่นกัน

มีส่วนขยายชุมชนบางส่วนที่พร้อมใช้งาน (แสดงอยู่ด้านล่าง) ซึ่งจะรีเฟรชบล็อกของคุณเมื่อกลายเป็นโมฆะ

https://github.com/tomasinchoo/Inchoo_InvalidatedBlockCacheFix

https://github.com/mklooss/Loewenstark_InvalidCache


2

นี่เป็นข้อผิดพลาด

มีปัญหางาน CRON (โพสต์ 1.9.?) ที่เรียกใช้และทำให้แคช HTML นั้นใช้งานไม่ได้ซึ่งก่อให้เกิดปัญหา (เช่นในกรณีของฉันล้มเหลวในการดำเนินการส่วนลดราคาให้กับ Basket - ดังนั้นลูกค้าจะถูกเรียกเก็บเงินผิดจำนวน)

เราไม่จำเป็นต้องเรียกใช้ส่วนขยายเพื่อแก้ไขปัญหาที่เกิดขึ้น!


ฉันได้รับพฤติกรรมเดียวกันที่แน่นอนใน CE 1.9.2.2 ทุกเช้าบล็อกผลลัพธ์ HTML จะต้องมีการรีเฟรชและคิดเกี่ยวกับปัญหางาน cron @Brian คุณสามารถให้รายละเอียดเพิ่มเติมเกี่ยวกับงาน cron นั้นได้หรือไม่
Marc

ฉันคิดว่าคุณกำลังคิดไปข้างหลังแม้ว่า: ไม่ใช่ "ราคาไม่ได้ส่งไปยังตะกร้า" แต่แทนที่จะเพิ่มราคาในหน้านั้นลงในแคชก่อนที่จะรีเฟรชและแคชนั้นผิด ในขณะที่ราคาที่ถูกต้องแสดงในรถเข็น ถึงผู้ซื้อพวกเขาอาจคิดว่าราคาใดที่ต่ำกว่านั้นคือ "ที่ถูกต้อง"
Eric Seastrand

@Brian คุณสามารถให้รายละเอียดเพิ่มเติมเกี่ยวกับงาน cron ที่ทำให้บล็อกของคุณใช้ไม่ได้หรือไม่
ฮาอิม

0

นี่คือการดำเนินการ Magento มาตรฐานจาก 1.6.xx และส่งต่อ มีบางสิ่งที่ทำให้การบล็อกแคช 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 จากแอพ / รหัส / ท้องถิ่น / Mage / CatalogRule / รุ่น / 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.