EE 1.14.2 এ সিএমএস ব্লক ক্যাচিংয়ের সমস্যা


15

আমার একটি সমস্যা রয়েছে যা মনে হচ্ছে সিএমএস স্ট্যাটিক ব্লকগুলির ক্যাশে সম্পর্কিত।

আমার একটি সেমি পৃষ্ঠা রয়েছে এবং সেই পৃষ্ঠাটির মধ্যে আমি অনেকগুলি সেমি স্ট্যাটিক ব্লক সরবরাহ করছি। সিএমএস পৃষ্ঠাগুলির একটি সরলিকৃত সংস্করণ এর মত দেখাচ্ছে:

<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>

দ্বিতীয় উদাহরণে আপনি দেখতে পাচ্ছেন প্রথম দুটি প্রোমো সঠিক, তবে তার পরে সবকিছুই ব্লক_আইডির জন্য ভুল সামগ্রী প্রদর্শন করছে। এছাড়াও, ব্লক প্রোমো_হম_1_1 এবং প্রোমো_হোম_২ উভয়ই দু'বার রেন্ডার করা হয় এবং প্রোমো_হোম_সেস__1 এবং প্রোমো_হোম_৪_২ কখনও কখনও রেন্ডার হয় না। এটি ব্লক_আইডি এবং এর সাথে সম্পর্কিত স্ট্যাটিক ব্লক সামগ্রীর মধ্যে ম্যাপিংয়ের মতো কোনওভাবে মিশ্রিত হচ্ছে। এটি ক্যাশিংয়ের সাথে সম্পর্কিত যেমন ব্লক ক্যাশে সক্ষম না হয় তবে আমি আর সমস্যাটি দেখতে পাচ্ছি না।

এছাড়াও, সম্ভবত এটি লক্ষণীয় যে এই পৃষ্ঠাটি EE 1.13 এ কাজ করত, তবে EE 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

ঠিক আছে তাই আমি এই সমস্যার কারণ খুঁজে পেয়েছি এবং এটি কোর ম্যাজেন্টোতে সমস্যা বলে মনে হচ্ছে।

ম্যাজেন্টো ১.১৪.২ তে ম্যাজে_সিএমএস_ব্লক_ব্লকের সাথে একটি নতুন _ কনস্ট্রাক্ট পদ্ধতি যুক্ত হয়েছে যার মধ্যে নিম্নলিখিত কোড রয়েছে।

/**
 * 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 এর পিছনে পড়ে যা লেআউটে ব্লকের নাম ব্যবহার করে। এই ক্ষেত্রে আমরা ব্লকটি যুক্ত করতে কোনও লেআউট এক্সএমএল ফাইল ব্যবহার করছি না এবং কোনও নাম সেট নেই। 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();
        }
    }
}

এটি সমস্যার সমাধান করেছে বলে মনে হচ্ছে।

হালনাগাদ:

দেখে মনে হচ্ছে এটি একই সমস্যাটি সিই ১.৯.২- এও বিদ্যমান রয়েছে


2

ম্যাজেন্টো ইই গ্রাহকদের জন্য, দয়া করে ম্যাজেন্টো এন্টারপ্রাইজ সহায়তা দল থেকে প্যাকেট SUPEE-5874 র অনুরোধ করুন।

এটি দুটি ফাইল আপডেট করবে

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

আমি ম্যাজেন্টো থেকে প্রকৃত প্যাচ পোস্ট করতে পারি না কারণ এটি তাদের সম্পত্তি।


1

এখানে খুশির বিষয় যে ম্যাজেন্টো এখন স্ট্যাটিক ব্লকগুলিও ক্যাশে করছে। যেহেতু বর্তমান আপগ্রেড সংস্করণটি স্ট্যাটিক ব্লকগুলি ক্যাশে করার কারণে এই জঘন্য সমস্যাটিকে অন্তর্ভুক্ত করেছে, আপনি আমার মডিউলটি একেবারে বিনামূল্যে ব্যবহার করতে পারেন।

এই এক্সটেনশনটি স্ট্যাটিক ব্লকগুলির আরও ভাল ক্যাশে করার জন্য তৈরি করা হয়েছে। এটি সাইটটি সুরক্ষিত কিনা তাও বিবেচনায় নেয়। এছাড়াও এক্সটেনশনে কোনও মূল পুনর্লিখন নেই, যা এই মডিউলটিকে আরও উন্নত করে।

আপনি এখানে যান

এক্সটেনশানটির আরও ভাল ওভারভিউয়ের জন্য, আপনি এই থ্রেডটি উল্লেখ করতে পারেন ।


0

আমরা সিই এর জন্য একটি প্যাচ সরবরাহ করেছি, যা এই সমস্যাটি সমাধান করে। যেহেতু EE সিই ভিত্তিক, এটিও প্রযোজ্য।

আপনি আমার গিস্ট থেকে এই পাথটি ডাউনলোড করতে পারেন: https://gist.github.com/tux-rampage/77b286f7973336877f7b

গিস্টটি লোড করুন, আনপ্যাক করুন এবং আপনার ম্যাজেন্টো রুটে নিম্নলিখিত কমান্ডটি চালান:

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

এটি কোনও লাইভ সিস্টেমে প্রয়োগের আগে মঞ্চ পরিবেশে এটি পরীক্ষা করুন!

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.