ईएमएस 1.14.2 में सीएमएस ब्लॉक कैशिंग मुद्दा


15

मेरे पास एक मुद्दा है जो सीएमएस स्थिर ब्लॉकों के कैशिंग से संबंधित है।

मेरे पास एक cms पृष्ठ है और उस पृष्ठ के भीतर मैं कई cms स्थैतिक ब्लॉक प्रदान कर रहा हूँ। सीएमएस पृष्ठ सामग्री का एक सरलीकृत संस्करण इस तरह दिखता है:

<div class="cms-block-1">{{block type="cms/block" block_id="banner_home"}}</div> 
<div class="cms-block-2">{{block type="cms/block" block_id="promo_home_1_1"}}</div> 
<div class="cms-block-3">{{block type="cms/block" block_id="promo_home_1_2"}}</div> 
<div class="cms-block-4">{{block type="cms/block" block_id="promo_home_2_1"}}</div> 
<div class="cms-block-5">{{block type="cms/block" block_id="promo_home_2_2"}}</div> 
<div class="cms-block-6">{{block type="cms/block" block_id="promo_home_2_3"}}</div> 
<div class="cms-block-7">{{block type="cms/block" block_id="promo_home_3_1"}}</div> 
<div class="cms-block-8">{{block type="cms/block" block_id="promo_home_3_2"}}</div>

ब्लॉक कैश साफ़ होने के तुरंत बाद पृष्ठ लोड हो जाता है, वह पृष्ठ कुछ इस तरह दिखता है:

<div class="cms-block-1">banner content</div> 
<div class="cms-block-2">promo_home_1_1 content</div> 
<div class="cms-block-3">promo_home_1_2 content</div> 
<div class="cms-block-4">promo_home_2_1 content</div> 
<div class="cms-block-5">promo_home_2_2 content</div> 
<div class="cms-block-6">promo_home_2_3 content</div> 
<div class="cms-block-7">promo_home_3_1 content</div> 
<div class="cms-block-8">promo_home_3_1 content</div>

हालाँकि इनबिल्ट पेज लोड होने के बाद, बाद के हर पेज पर सामग्री गलत है। यह इस तरह दिख रहा है:

<div class="cms-block-1">banner content</div> 
<div class="cms-block-2">promo_home_1_1 content</div> 
<div class="cms-block-3">promo_home_1_2 content</div> 
<div class="cms-block-4">promo_home_1_1 content</div> 
<div class="cms-block-5">promo_home_1_2 content</div> 
<div class="cms-block-6">promo_home_2_1 content</div> 
<div class="cms-block-7">promo_home_2_2 content</div> 
<div class="cms-block-8">promo_home_2_3 content</div>

दूसरे उदाहरण में आप देख सकते हैं कि पहले दो प्रोमो सही हैं, हालांकि उसके बाद सब कुछ block_id के लिए गलत सामग्री प्रदर्शित कर रहा है। इसके अलावा, प्रोमो promo_home_1_1 और promo_home_1_2 दोनों को दो बार प्रस्तुत किया गया है और promo_home_3_1 और promo_home_3_2 को कभी भी गाया नहीं गया है। यह ब्लॉक_आईडी और इसके संबंधित स्थिर ब्लॉक सामग्री के बीच मानचित्रण की तरह किसी तरह मिलाया जा रहा है। यह कैशिंग से संबंधित है क्योंकि यदि ब्लॉक कैश सक्षम नहीं है तो मैं अब समस्या नहीं देखता।

इसके अलावा, यह संभवतः ध्यान देने योग्य है कि यह पृष्ठ ईई 1.13 पर काम करता था, हालांकि ईई 1.14.2 में अपग्रेड करने के बाद यह समस्या उत्पन्न होने लगी है।

मुझे पता है कि सिस्टम में और क्या चल रहा है, यह जानने के बिना कि क्या गलत है, लेकिन मैं उम्मीद कर रहा हूं कि कोई व्यक्ति मुझे कम से कम कुछ और दिशा देने में सक्षम हो सकता है क्योंकि मैं विचारों से बाहर चल रहा हूं।

अपडेट करें:

मैंने भी विगेट्स के साथ यह कोशिश की, जैसे

<div class="cms-block-1">{{widget type="cms/widget_block" template="cms/widget/static_block/default.phtml" block_id="63"}}</div>
<div class="cms-block-2">{{widget type="cms/widget_block" template="cms/widget/static_block/default.phtml" block_id="64"}}</div>
<div class="cms-block-3">{{widget type="cms/widget_block" template="cms/widget/static_block/default.phtml" block_id="65"}}</div>

इस स्थिति में सभी 3 ब्लॉकों ने समान सामग्री लौटा दी, भले ही आईडी डेटाबेस में विभिन्न ब्लॉकों की ओर इशारा कर रहे हों। जब कैश साफ़ हो जाता है तो लौटा दिया गया ब्लॉक कभी-कभी बदल जाएगा, लेकिन सभी तीन विजेट्स में अभी भी समान सामग्री होगी।


क्या आप इसे विजेट्स के लिए हल करने में सक्षम थे?
सर्गेई गुक

मुझे वास्तव में यह समस्या नहीं थी इसलिए नहीं, लेकिन ऐसा लग रहा है कि Mage_Cms_Block_Widget_Block में एक ही समस्या हो सकती है और इसलिए एक ही समाधान
एंड्रयू केट

जवाबों:


5

ठीक है तो मुझे इस समस्या का कारण मिल गया है और यह कोर मैगनेटो में एक समस्या लगती है।

Magento 1.14.2 में Mage_Cms_Block_Block में एक नई _construct विधि जोड़ी गई है जिसमें निम्न कोड है।

/**
 * Initialize cache
 *
 * @return null
 */
protected function _construct()
{
    /*
    * setting cache to save the cms block
    */
    $this->setCacheTags(array(Mage_Cms_Model_Block::CACHE_TAG));
    $this->setCacheLifetime(false);
}

यह प्रभावी रूप से सेमी ब्लॉक के लिए कैशिंग चालू कर रहा है। कोई कैश कुंजी सेट नहीं है, इसलिए यह Mage_Core_Block_Abstract :: getCacheKeyInfo पर वापस आती है, जो लेआउट में ब्लॉक के नाम का उपयोग करती है। इस मामले में हम वास्तव में ब्लॉक को जोड़ने के लिए एक लेआउट xml फ़ाइल का उपयोग नहीं कर रहे हैं और कोई नाम सेट नहीं है। Magento के नाम के रूप में ANONYMOUS_78 की तरह कुछ सेट करके इसे संभालने और संभालने की कोशिश करता है। हालाँकि किसी कारण से यह 100% काम नहीं करता है इसलिए मुझे जो डुप्लिकेट दिखाई दे रहा था।

मेरा समाधान मेरे अपने विस्तार में Mage_Cms_Block_Block वर्ग को ओवरराइड करने और एक निर्दिष्ट मान के बजाय कैश आईडी को स्पष्ट रूप से ब्लॉक आईडी में सेट करने के लिए एक नई विधि जोड़ना था। वर्ग इस तरह दिखता है:

/**
 * Override cms/block to add cache key. This started being a problem as of EE 1.14.2 when the _construct
 * method was added which turns on caching for cms blocks
 */
class Mysite_Cms_Block_Block extends Mage_Cms_Block_Block
{

    /**
     * If this block has a block id, use that as the cache key.
     *
     * @return array
     */
    public function getCacheKeyInfo()
    {
        if ($this->getBlockId()) {
            return array(
                Mage_Cms_Model_Block::CACHE_TAG,
                Mage::app()->getStore()->getId(),
                $this->getBlockId(),
                (int) Mage::app()->getStore()->isCurrentlySecure()
            );
        } else {
            return parent::getCacheKeyInfo();
        }
    }
}

इससे समस्या हल हो गई है।

अपडेट करें:

ऐसा लगता है कि सीई 1.9.2 में भी यही समस्या मौजूद है


2

Magento EE ग्राहकों के लिए, कृपया Magento Enterprise सपोर्ट टीम से पैच SUPEE-5874 का अनुरोध करें।

यह दो फाइलों को अपडेट करेगा

app/code/core/Mage/Cms/Block/Widget/Block.php
app/code/core/Mage/Cms/Block/Block.php

मैं Magento से वास्तविक पैच पोस्ट नहीं कर सकता क्योंकि यह उनकी संपत्ति है।


1

यह यहाँ खुशी है कि अब Magento स्टैटिक ब्लॉक को भी कैश कर रहा है। चूंकि वर्तमान उन्नत संस्करण में स्थिर ब्लॉकों को कैश करने के कारण यह अजीब मुद्दा शामिल है, आप बिल्कुल मुफ्त में मेरे मॉड्यूल का उपयोग कर सकते हैं।

यह एक्सटेंशन स्टैटिक ब्लॉक की बेहतर कैशिंग के लिए बनाया गया है। यह भी ध्यान में रखा जाता है कि साइट सुरक्षित है या नहीं। साथ ही एक्सटेंशन में कोई कोर रिराइट नहीं है, जो इस मॉड्यूल को और भी बेहतर बनाता है।

यहाँ तुम जाओ

विस्तार के बेहतर अवलोकन के लिए, आप इस धागे को संदर्भित कर सकते हैं


0

हमने सीई के लिए एक पैच प्रदान किया है, जो इस मुद्दे को हल करता है। चूंकि ईई सीई में आधारित है, इसलिए यह लागू हो सकता है।

आप इस रास्ते को मेरे gist से डाउनलोड कर सकते हैं: https://gist.github.com/tux-rampage/77b286f7973336877f7b

नीचे का भार उठाएं, इसे अनपैक करें, और अपने magento रूट में निम्न कमांड चलाएँ:

patch -p2 </path/to/LUKA-MCE20150714-cms-caching-hotfix.patch

इसे लाइव सिस्टम पर लगाने से पहले स्टेजिंग के माहौल पर टेस्ट करें!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.