Geçersiz Kılınmış Blok Türleri


9

Günde birkaç kez aşağıdaki hata mesajını alıyorum ve Magento CE 1.9.0.1'in iç işleyişine dair bilgim, bunun normal olup olmadığını, Magento'nun danışma davranışını mı, yoksa bana kötü bir sorun var.

İşte mesaj:

Önbellek Türlerinden biri veya daha fazlası geçersiz kılındı: HTML çıktısını engeller. Önbellek Yönetimi'ne gitmek ve önbellek türlerini yenilemek için burayı tıklayın.

Bu önbelleği yenilemek sorunu birkaç saat kadar ortadan kaldırır.

Şu anda düzenleri, ürünleri vb. Düzenlemiyorum, hiçbir şey yapmıyorum.

Sorun nedir ve nasıl düzeltebilirim?


Bunu her gün uyandığımda ve Magento v1.9.2.2'de oturum açtığımda alıyorum - Önbellek Türlerinden biri veya daha fazlası geçersiz: HTML çıktısını engeller. Önbellek Yönetimi'ne gitmek ve önbellek türlerini yenilemek için burayı tıklayın. Aslında bir şey yapmadıkça bunu önceki sürümlerde hiç kullanmamıştım. Bu bir tür böcek mi?
Neal Hart

Yanıtlar:


6

Öncelikle bunun bir hata olmadığını, sadece bir bildirim olduğunu anlamak önemlidir.

Bir blok önbelleğin ürün güncellemelerinden, katalog fiyat kuralı değişikliklerinden ve 3. taraf uzantılarından geçersiz kılınmasının birçok nedeni olabilir. Ayrıca cronjobs'un çalıştırılması blok önbelleklerin de geçersiz kılınmasına neden olabilir.

Geçersiz hale geldikçe bloklarınızı yenileyecek bazı topluluk uzantıları (aşağıda listelenmiştir) vardır.

https://github.com/tomasinchoo/Inchoo_InvalidatedBlockCacheFix

https://github.com/mklooss/Loewenstark_InvalidCache


2

Bu bir hatadır.

HTML Önbelleğini çalıştıran ve geçersiz kılan bir CRON iş sorunu (post 1.9.?) Vardır, bu da sorun yaratır (örneğin benim durumumda, sepete fiyat indirimi yapamamıştır - bu nedenle bir müşteri yanlış ücretlendirilir).

Sunulan bir sorunu çözmek için bir uzantı çalıştırmamıza gerek yok!


CE 1.9.2.2'de aynı davranışı alıyorum, her sabah Bloklar HTML çıktısının yenilenmesi gerekiyor ve bir cron işi sorunu hakkında düşünülüyor. @Brian, o cron görevi hakkında daha fazla ayrıntı verebilir misiniz?
Marc

Gerçi geriye doğru düşündüğünüzü düşünüyorum: "Fiyat sepete taşınmamıştı" değil, daha ziyade yenileme işlemi başlamadan önce sayfadaki fiyat önbelleğe eklenmişti ve bu nedenle önbellek yanlıştı. , alışveriş sepetinde gösterilen doğru fiyat. Ancak alıcıya, muhtemelen hangi fiyatın daha düşük olduğunu "doğru" olduğunu düşünüyorlar.
Eric Seastrand

@Brian, Bloklarınızı geçersiz kılan cron görevi hakkında daha fazla bilgi verebilir misiniz?
Haim

0

Bu 1.6.xx ve sonrası standart Magento işlemi. Bir şey her zaman rastgele bir html blok önbellek geçersizliğine neden oluyor.

Sadece periyodik bir cron işini başlatan bir gözlemci ayarladım, uygun olan her aralığı ayarladım.

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

Bu geçersiz kılınan önbellek göstergesi muhtemelen dailyCatalogUpdate cron ile ilgilidir. Katalog kurallarının uygulanmasından / yenilenmesinden sorumludur.

Günde bir kez arar Mage::getSingleton('catalogrule/rule')->applyAll();.

Bu yöntemin kodunun içinde bir çağrı var $this->_invalidateCache(), bu $this->_app->getCacheInstance()->invalidateType()da block_htmlönbellekte çağrı yapıyor .

Sorun, gerçekten geçerli olup olmadığını belirlemek için herhangi bir denetim yapmadan önbelleği geçersiz kılmasıdır. Bana göre bu daha iyi olduğunu değil o zaman en azından geçersiz olabileceğini biliyoruz ve benzeri kullanım şey, çünkü önbelleği geçersiz Fiyasko Labs önerdi (potansiyel olarak) temizlenmesi için önbelleğe alınmış verileri geçersiz.

Daha sonra şu tarafta hata yapmak isteyip istemediğinize karar verir:

A) Müşterilere yanlış fiyatı göstermek, ancak önbelleği tutmak ve böylece daha az sunucu yüküne sahip olmak

veya

B) Doğru fiyatı göstermek, ancak daha fazla önbellek eksikliğine ve dolayısıyla daha yüksek sunucu yüküne sahip olmak.

Bilgisayar biliminde iki zor şey vardır: şeyleri adlandırmak ve önbellek geçersiz kılma .


0

çözümü burada görebilirsiniz: https://magento.stackexchange.com/a/72687

Temel olarak dailyCatalogUpdate işlevini app / code / local / Mage / CatalogueRule / Model / Observer.php olarak değiştirin.

        $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;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.