無効なブロックタイプ


9

1日に数回次のエラーメッセージが表示されます。MagentoCE 1.9.0.1の内部動作に関する私の知識は十分に薄いため、これが正常であるか、Magentoからの助言的な動作であるか、または私は悪い問題を抱えています。

ここにメッセージがあります:

1つ以上のキャッシュタイプが無効になります:HTML出力をブロックします。ここをクリックしてキャッシュ管理に移動し、キャッシュタイプを更新します。

特定のキャッシュを更新すると、問題が数時間ほど解消されます。

私は現在、レイアウトや製品などを編集していません。

何が問題で、どうすれば修正できますか?


Magento v1.9.2.2で目を覚ましてサインインすると、毎日これが表示されます。1つ以上のキャッシュタイプが無効になっています。HTML出力をブロックします。ここをクリックしてキャッシュ管理に移動し、キャッシュタイプを更新します。私が実際に何かをしていなかった場合を除き、以前のバージョンではこれを取得することはありませんでした。これはある種のバグですか?
Neal Hart

回答:


6

まず、これはエラーではなく、単なる通知であることを理解することが重要です。

製品の更新、カタログ価格ルールの変更、およびサードパーティの拡張機能により、ブロックキャッシュが無効になる理由は無数にあります。また、cronjobsを実行すると、ブロックキャッシュも無効になる可能性があります。

が無効になるとブロックを更新するコミュニティ拡張機能がいくつか用意されています(下記を参照)。

https://github.com/tomasinchoo/Inchoo_InvalidatedBlockCacheFix

https://github.com/mklooss/Loewenstark_InvalidCache


2

これはエラーです。

HTMLキャッシュを実行して無効にするCRONジョブの問題(1.9。?以降)があり、問題が発生します(たとえば、私の場合、バスケットに価格割引を引き継ぐことができなかったため、顧客に間違った金額が請求されます)。

導入された問題を修正するために拡張機能を実行する必要はありません。


CE 1.9.2.2でもまったく同じ動作をしています。毎朝、Blocks HTML出力を更新する必要があり、cronジョブの問題について考えています。@ブライアン、そのcronタスクの詳細を教えてください。
2015

ただし、「価格がバスケットに引き継がれなかった」のではなく、更新が実行される前にページの価格がキャッシュに追加されたため、キャッシュが間違っていたと思います。 、カートに正しい価格が表示されます。しかし、購入者にとっては、価格が低い方が「正しい」ものであると彼らは思うでしょう。
Eric Seastrand、2016

@ブライアン、ブロックを無効にしていたcronタスクの詳細を教えてください。
ハイム、2016年

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に関連しています。カタログルールの適用/更新を担当します。

1日1回、を呼び出しますMage::getSingleton('catalogrule/rule')->applyAll();

このメソッドのコード内にへの呼び出しが$this->_invalidateCache()あり、次にキャッシュが呼び出さ$this->_app->getCacheInstance()->invalidateType()block_htmlます。

問題は、実際にまだ有効であるかどうかを確認するチェックを行わずにキャッシュを無効にすることです。私にとって、これはキャッシュを無効にしないよりはましです。少なくともキャッシュが無効である可能性があることを知り、Fiasco Labsが提案したような(潜在的に)無効なキャッシュデータをフラッシュするためです。

次に、次の側面でエラーを発生させるかどうかを決定します。

A)顧客に間違った価格を表示するが、キャッシュは保持するため、サーバーの負荷が少ない

または

B)正しい価格を示しているが、キャッシュミスが多く、サーバーの負荷が高い。

コンピュータサイエンスには、命名とキャッシュの無効化という2つの難しいことがあります。


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.