Magento 2.2.1 মান ক্রমিকায়িত করতে অক্ষম


12

আমি ওয়েবসাইটটি ২.১..6 থেকে ২.২.১ এ আপগ্রেড করেছি এবং সম্মুখভাগ এবং ব্যাকএন্ডে মান ত্রুটি সিরিয়াল করতে অক্ষম হয়েছি facing

{"0":"Unable to serialize value.","1":"#0 \/var\/www\/vhosts\/demo.com\/eiselec\/vendor\/magento\/framework\/Translate.php(494): Magento\\Framework\\Serialize\\Serializer\\Json->serialize(Array)\n
#1 \/var\/www\/vhosts\/demo.com\/eiselec\/vendor\/magento\/framework\/Translate.php(190): Magento\\Framework\\Translate->_saveCache()\n
#2 \/var\/www\/vhosts\/demo.com\/eiselec\/vendor\/magento\/framework\/App\/Area.php(244): Magento\\Framework\\Translate->loadData(NULL, false)\n
#3 \/var\/www\/vhosts\/demo.com\/eiselec\/vendor\/magento\/framework\/App\/Area.php(215): Magento\\Framework\\App\\Area->_initTranslate()\n
#4 \/var\/www\/vhosts\/demo.com\/eiselec\/vendor\/magento\/framework\/App\/Area.php(142): Magento\\Framework\\App\\Area->_loadPart('translate')\n
#5 \/var\/www\/vhosts\/demo.com\/eiselec\/vendor\/magento\/framework\/View\/DesignLoader.php(55): Magento\\Framework\\App\\Area->load('translate')\n
#6 \/var\/www\/vhosts\/demo.com\/eiselec\/vendor\/magento\/framework\/App\/Action\/Plugin\/Design.php(48): Magento\\Framework\\View\\DesignLoader->load()\n
#7 \/var\/www\/vhosts\/demo.com\/eiselec\/vendor\/magento\/framework\/Interception\/Interceptor.php(121): Magento\\Framework\\App\\Action\\Plugin\\Design->beforeDispatch(Object(Magento\\Cms\\Controller\\Index\\Index\\Interceptor), Object(Magento\\Framework\\App\\Request\\Http))\n
#8 \/var\/www\/vhosts\/demo.com\/eiselec\/vendor\/magento\/framework\/Interception\/Interceptor.php(153): Magento\\Cms\\Controller\\Index\\Index\\Interceptor->Magento\\Framework\\Interception\\{closure}(Object(Magento\\Framework\\App\\Request\\Http))\n
#9 \/var\/www\/vhosts\/demo.com\/eiselec\/generated\/code\/Magento\/Cms\/Controller\/Index\/Index\/Interceptor.php(39): Magento\\Cms\\Controller\\Index\\Index\\Interceptor->___callPlugins('dispatch', Array, Array)\n
#10 \/var\/www\/vhosts\/demo.com\/eiselec\/vendor\/magento\/framework\/App\/FrontController.php(55): Magento\\Cms\\Controller\\Index\\Index\\Interceptor->dispatch(Object(Magento\\Framework\\App\\Request\\Http))\n
#11 \/var\/www\/vhosts\/demo.com\/eiselec\/vendor\/magento\/framework\/Interception\/Interceptor.php(58): Magento\\Framework\\App\\FrontController->dispatch(Object(Magento\\Framework\\App\\Request\\Http))\n
#12 \/var\/www\/vhosts\/demo.com\/eiselec\/vendor\/magento\/framework\/Interception\/Interceptor.php(138): Magento\\Framework\\App\\FrontController\\Interceptor->___callParent('dispatch', Array)\n
#13 \/var\/www\/vhosts\/demo.com\/eiselec\/vendor\/magento\/module-store\/App\/FrontController\/Plugin\/RequestPreprocessor.php(94): Magento\\Framework\\App\\FrontController\\Interceptor->Magento\\Framework\\Interception\\{closure}(Object(Magento\\Framework\\App\\Request\\Http))\n
#14 \/var\/www\/vhosts\/demo.com\/eiselec\/vendor\/magento\/framework\/Interception\/Interceptor.php(135): Magento\\Store\\App\\FrontController\\Plugin\\RequestPreprocessor->aroundDispatch(Object(Magento\\Framework\\App\\FrontController\\Interceptor), Object(Closure), Object(Magento\\Framework\\App\\Request\\Http))\n
#15 \/var\/www\/vhosts\/demo.com\/eiselec\/vendor\/magento\/module-page-cache\/Model\/App\/FrontController\/BuiltinPlugin.php(73): Magento\\Framework\\App\\FrontController\\Interceptor->Magento\\Framework\\Interception\\{closure}(Object(Magento\\Framework\\App\\Request\\Http))\n
#16 \/var\/www\/vhosts\/demo.com\/eiselec\/vendor\/magento\/framework\/Interception\/Interceptor.php(135): Magento\\PageCache\\Model\\App\\FrontController\\BuiltinPlugin->aroundDispatch(Object(Magento\\Framework\\App\\FrontController\\Interceptor), Object(Closure), Object(Magento\\Framework\\App\\Request\\Http))\n
#17 \/var\/www\/vhosts\/demo.com\/eiselec\/vendor\/magento\/framework\/Interception\/Interceptor.php(153): Magento\\Framework\\App\\FrontController\\Interceptor->Magento\\Framework\\Interception\\{closure}(Object(Magento\\Framework\\App\\Request\\Http))\n
#18 \/var\/www\/vhosts\/demo.com\/eiselec\/generated\/code\/Magento\/Framework\/App\/FrontController\/Interceptor.php(26): Magento\\Framework\\App\\FrontController\\Interceptor->___callPlugins('dispatch', Array, NULL)\n
#19 \/var\/www\/vhosts\/demo.com\/eiselec\/vendor\/magento\/framework\/App\/Http.php(135): Magento\\Framework\\App\\FrontController\\Interceptor->dispatch(Object(Magento\\Framework\\App\\Request\\Http))\n
#20 \/var\/www\/vhosts\/demo.com\/eiselec\/vendor\/magento\/framework\/App\/Bootstrap.php(256): Magento\\Framework\\App\\Http->launch()\n
#21 \/var\/www\/vhosts\/demo.com\/eiselec\/index.php(39): Magento\\Framework\\App\\Bootstrap->run(Object(Magento\\Framework\\App\\Http))\n
#22 {main}","url":"\/","script_name":"\/index.php"}

আমি কীভাবে এটি সমাধান করতে পারি তা আমাকে জানান।

ধন্যবাদ


হাই, আমি সিরিয়ালাইজ মানটি আনসরিয়াজ মানের কথা বলছি।
মেটানশি

আপনি কি ক্যাশে সাফ করার চেষ্টা করেছেন? শুধুমাত্র ম্যাজেন্টো ক্যাশে নয়, বাহ্যিক ক্যাশেগুলিও যদি থাকে।
MGento

হ্যাঁ, আমি চেষ্টা করেছি
মেটানশি

আপনি কী ডেটা ক্রমিক করার চেষ্টা করছেন তা অনুসন্ধান করার চেষ্টা করতে পারেন? আপনার তৃতীয় পক্ষের মডিউলগুলি অনুসরণ করার চেষ্টা করুন এবং কোন মডিউল থেকে এই ত্রুটিটি ট্রিগার হয়েছে তা সন্ধান করুন। আপনার সম্ভবত সিরিয়ালাইজ ফাংশনটি ওভাররাইড করার প্রয়োজন হতে পারে / ফাইল / উইন্ডোয়ার
সেমেন্টো /

এই ত্রুটিটি ডিবি আপডেটের সময় ঘটছে বা আপনি ডিবিকে ২.২.১ এ আপডেট করার পরে?
drew7721

উত্তর:


4

একটি টেম্পলেট সঙ্গে আমার একই আচরণ। আমি আমার সিরিয়ালাইজারে ত্রুটিটির জন্য কোডটি অনুলিপি করেছিলাম যাতে আমার সমস্যা হয়।

যত তাড়াতাড়ি আমি ডি_ডিই-তে স্যুইচ করব এবং এর মাধ্যমে আমার স্ট্যাটিক কোডটি পুনরায় তৈরি করব

sudo php bin/magento setup:static-content:deploy de_DE --jobs=0 -f

এটি "ত্রুটিযুক্ত ইউটিএফ -8 অক্ষরগুলি সম্ভবত ভুলভাবে এনকোড করে ফেলেছে"।

সুতরাং আমি টেমপ্লেট ফোল্ডারে (যেমন কোড / মাইথিম / ব্যানারস্লাইডার / i18n / de_DE.csv) ফাইলগুলি পরিবর্তিত করেছি এবং সেগুলি উইনসিসিপি এর মাধ্যমে ডাউনলোড করেছি। নোটপ্যাড ++ "আনসিআই এনকোডিং" দেখিয়েছে - অনুবাদ ফাইলটি তৈরি করতে আমি "ম্যাজেন্টো আই 18 এন: সংগ্রহ-বাক্যাংশগুলি" ব্যবহার করেছিলাম hard

magento2dev # encguess app/code/MyTheme/Bannerslider/i18n/de_DE.csv

অ্যাপ্লিকেশন / কোড / মাই থেম / ব্যানারস্লাইডার / i18n / de_DE.csv ইউএস-এএসসিআইআই

magento2dev # locale
LANG=de_DE.UTF-8
......

সুতরাং আমি নোটপ্যাড ++ এ ম্যানুয়ালি ফাইলগুলি পরিবর্তন করেছি, সেগুলি আপলোড করেছি, স্থির সামগ্রী স্থাপন করেছি এবং সমস্ত অনুমতি পুনরায় সেট করেছি - en voila এটি কাজ করে।

সুতরাং, বাগটি আপনার আই 18 এন সিএসভি ফাইলে থাকতে পারে।


10

আমি দেখতে পাচ্ছি যে এই ত্রুটিটি পদ্ধতি থেকে আসে:

/**
 * Saving data cache
 *
 * @return $this
 */
protected function _saveCache()
{
    $this->_cache->save($this->getSerializer()->serialize($this->getData()), $this->getCacheId(true), [], false);
    return $this;
}

এবং সিরিয়ালাইজার যা পাওয়া যায় না তা পদ্ধতি থেকে আসে:

/**
 * Get serializer
 *
 * @return \Magento\Framework\Serialize\SerializerInterface
 * @deprecated 100.2.0
 */
private function getSerializer()
{
    if ($this->serializer === null) {
        $this->serializer = \Magento\Framework\App\ObjectManager::getInstance()
            ->get(Serialize\SerializerInterface::class);
    }
    return $this->serializer;
}

SerializerInterfaceম্যাজেন্টোর 2.2.x সংস্করণ থেকে এর জন্য অগ্রাধিকারটি যুক্ত করা হয়েছিল এবং অ্যাপ্লিকেশন / ইত্যাদি / ডি.এক্সএমএল এ ঘোষণা করা হয়েছিল :

<preference for="Magento\Framework\Serialize\SerializerInterface" type="Magento\Framework\Serialize\Serializer\Json" />

সুতরাং আমি মনে করি আপনার ক্যাশে পুরানো বা এর পছন্দটি SerializerInterfaceকাজ করছে না। Magento\Framework\Serialize\SerializerInterfaceকোডটিতে একই জায়গায় (নির্ভরতা ইনজেকশন ব্যবহার করে) কল করে এই সমস্যাটি ডিবাগ করার চেষ্টা করুন এবং কোন ক্লাসটি ডি দ্বারা ফিরে এসেছে তা পরীক্ষা করে দেখুন:

public function __construct(\Magento\Framework\Serialize\SerializerInterface $serializer) 
{ 
    echo get_class($serializer);
}

যদি এটি Magento\Framework\Serialize\Serializer\Jsonক্লাসটি ফেরত পাঠানো কোনও উদাহরণ না দেয় - প্রকল্পে এই ওভাররাইট করা পছন্দটি অনুসন্ধান করার চেষ্টা করুন এবং এটি মুছে ফেলুন।

আপনি যদি রিমোট সার্ভারে কাজ করছেন - প্রথমে সার্ভারের app/etc/di.xmlফাইলটি সরাসরি দেখুন।

আপনি Jsonআরিকভাবে কোর সিরিয়ালাইজারকে সাময়িকভাবে সংশোধন করতে পারেন এবং কোন ত্রুটিটি ফিরে এসেছে তা পরীক্ষা করতে পারেন :

খুলুন magento/framework/Serialize/Serializer/Json.phpএবং এই পদ্ধতিটি থেকে পরিবর্তন করুন:

/**
 * {@inheritDoc}
 * @since 100.2.0
 */
public function serialize($data)
{
    $result = json_encode($data);
    if (false === $result) {
        throw new \InvalidArgumentException('Unable to serialize value.');
    }
    return $result;
}

প্রতি:

/**
 * {@inheritDoc}
 * @since 100.2.0
 */
public function serialize($data)
{
    $result = json_encode($data);
    if (false === $result) {
        switch (json_last_error()) {
            case JSON_ERROR_NONE:
                $error = ' - No errors';
                break;
            case JSON_ERROR_DEPTH:
                $error = ' - Maximum stack depth exceeded';
                break;
            case JSON_ERROR_STATE_MISMATCH:
                $error = ' - Underflow or the modes mismatch';
                break;
            case JSON_ERROR_CTRL_CHAR:
                $error = ' - Unexpected control character found';
                break;
            case JSON_ERROR_SYNTAX:
                $error = ' - Syntax error, malformed JSON';
                break;
            case JSON_ERROR_UTF8:
                $error = ' - Malformed UTF-8 characters, possibly incorrectly encoded';
                break;
            default:
                $error = ' - Unknown error';
                break;
        }
        throw new \InvalidArgumentException('Unable to serialize value. Error: ' . $error);
    }

    return $result;
}

তারপরে আপনি ব্যতিক্রম বার্তার পরে একটি জাসন ত্রুটি দেখতে পাবেন। আপনার ডেটা ভাঙ্গা হতে পারে। মনে রাখবেন যে সমস্ত পুরানো ডেটা ম্যাজেন্টো আপডেটের সময় সেটআপ আপগ্রেড স্ক্রিপ্টগুলিতে জসন ব্যবহার করে আনসিরিয়ালাইজড এবং সিরিয়ালাইজ করা উচিত।

পিএস: ডিবাগিং সম্পূর্ণ হওয়ার পরে মূল ফাইলগুলি ফিরতে ভুলবেন না! সেই উদ্দেশ্যে xDebug ব্যবহার করা আরও ভাল।


2
আপনার সেই ডিবাগার- সহায়ককে
অ্যালেক্স

2

আমার ক্ষেত্রে একটি ইউটিএফ 8 এনকোডিং সমস্যার কারণ হ'ল পণ্যের নামগুলি নন-মাল্টবাইট নিরাপদ সংক্ষিপ্তকরণ:

$productName = strlen($productName) > 60 ? substr($productName,0,60)."..." : 
      $productName;

সুতরাং ক

012345678901234567890123456789012345678901234567890123456 Außengewinde 

হয়ে ওঠে

012345678901234567890123456789012345678901234567890123456 Au�...

এটি আমাদের জন্যও সমস্যা ছিল। এটি "সাবস্ট্রাস্টার" "এমবি_সুবস্ট্র" দিয়ে প্রতিস্থাপন করে
আমেশ

একটি যাদুমন্ত্র মত কাজ করে!!!
ভারত সেভরা

2

সাবস্ট্রাস্ট ফাংশন সম্পর্কে সতর্কতা অবলম্বন করুন। এটি ইউটিএফ -8 সমর্থন করে না। এবং এটি এফপিসি ভাঙ্গতে পারে। Mb_substr ব্যবহার করুন


1

আমি একই ইস্যুতে 2.2.1 এ আপগ্রেড নিয়ে দৌড়েছি। আমি এই articel খুব সহায়ক হতে পাওয়া http://devdocs.magento.com/guides/v2.2/ext-best-practices/tutorials/serialized-to-json-data-upgrade.html

ডিবিতে সঞ্চিত ডেটা আর সিরিয়ালিয়াল করা উচিত নয়, এটি এখন জেএসএন অবজেক্ট হিসাবে সংরক্ষণ করা উচিত।

বেশিরভাগ মডিউল একটি ডেটা আপডেট করে যা ডিবিতে ডেটা আনসিরিয়ালাইজ করে এবং এটিকে আবার জেএসওএন ফর্ম্যাটের অধীনে সঞ্চয় করে। (বিটিডব্লিউ এটি চালাতে বেশ খানিকটা সময় নিয়েছে ...)

সুতরাং, যদি আপনার কোনও মডিউল ডিবিতে সিরিয়ালযুক্ত ডেটা সংরক্ষণ করে যে ম্যাজেন্টো দ্বারা ডেটা আর পঠনযোগ্য না হতে পারে, আপনাকে ডেটা আপগ্রেড সেটআপ ফাইল তৈরি করতে হবে make এছাড়াও, এটি একটি তৃতীয় পক্ষের মডিউল হতে পারে যা একটি 2.2+ সামঞ্জস্যপূর্ণ সংস্করণে আপডেট করা দরকার।

আপনি যদি আপনার কোডের কোথাও অনিরিয়াল ডেটাতে সিরিয়ালাইজ করেন তবে আপনাকে এটিও পরিবর্তন করতে হতে পারে।

আমি আশা করি এটি আপনাকে কী কারণে এই ত্রুটি সৃষ্টি করছে তা আরও ভাল অন্তর্দৃষ্টি দেয়।

চিয়ার্স!


রিলিজ নোটগুলি ২.২.১-এ পড়ার বিষয়টি নিশ্চিত করুন, generationফোল্ডারের পথ সহ অনেকগুলি পরিবর্তন হয়েছে । ;)
drew7721

1

আমি ঠিক একই পরিস্থিতিতে শেষ। উপরের কোডটি যুক্ত করার পরে আমি "বিকৃত UTF-8 টি অক্ষর পেয়েছি, সম্ভবত ভুলভাবে এনকোড করেছি"

আমি মনে করি আপনি ডিফল্ট ভাষা ব্যবহার করছেন না। ভাষাটিকে "ডিফল্ট" en_US এ পরিবর্তন করার চেষ্টা করুন।

মিলানশি - আপনি ফ্রন্ট-এন্ডে কোন ভাষা ব্যবহার করছেন এবং স্থির-সামগ্রী তৈরিও ব্যর্থ হচ্ছে?


হাই @ এপি, আমি একই ত্রুটির মুখোমুখি হয়েছি এবং আমি ডি_ডিই ভাষা ব্যবহার করছি।
মিতানশি

En_US এ পরিবর্তন করার চেষ্টা করুন। সারণী কোর_কনফিগ_ডেটা (সাধারণ / স্থানীয় / কোড) en_US
এপি

en_US এ পরিবর্তনের পরে একই ত্রুটি।
মিটানশি

আমি এটি পেতে পরিচালিত হয়েছি, তবে ফাইএফআই-তে ফিরে যাওয়ার চেষ্টা করার সময় মৃত-শেষ। আপনি ক্যাশে সাফ করেছেন?
এপি

হ্যাঁ, আমি ক্যাশে সাফ করে
দিয়েছি

0

আমার জন্য সমাধানটি ছিল সিএসভি ফাইল অনুবাদে "ä" এর মতো সমস্ত বিশেষ অক্ষরকে একই চরিত্রের এইচটিএমএল সংস্করণগুলির সাথে প্রতিস্থাপন করা:

&auml;

তারপরে আমি ক্যাশে সাফ করে দিয়েছিলাম এবং সম্মুখভাগটি পুনরায় লোড করেছি।

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