Magento 2.2.1 मान को क्रमबद्ध करने में असमर्थ


12

मैंने 2.1.6 से 2.2.1 तक वेबसाइट को अपग्रेड किया है और फ्रंटएंड और बैकएंड में वैल्यू एरर को अचीव करने में असमर्थ है।

{"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"}

मुझे पता है कि मैं इसे कैसे हल कर सकता हूं।

धन्यवाद


नमस्ते, मैं क्रमबद्ध मूल्य के बारे में बात कर रहा हूं जो मूल्य का खुलासा नहीं करता है।
मीतांशी

क्या आपने कैश साफ़ करने की कोशिश की है? केवल Magento कैश नहीं, बाहरी कैश भी यदि कोई हो।
MGento

हां, मैंने कोशिश की है।
मीतांशी

क्या आप यह पता लगाने की कोशिश कर सकते हैं कि आप किस डेटा को क्रमबद्ध करने की कोशिश कर रहे हैं? अपने तीसरे पक्ष के मॉड्यूल के माध्यम से ट्रैवर्सिंग करने का प्रयास करें और पता करें कि किस मॉड्यूल से यह त्रुटि उत्पन्न होती है। आपको शायद फ़ाइल /vendor/magento/framework/Serialize/Serializer/Json.php
MGento

क्या यह त्रुटि DB अद्यतन के दौरान हो रही है या आपके द्वारा DB को 2.2.1 में अद्यतन करने के बाद हो रही है?
drew7721

जवाबों:


4

मैं एक टेम्पलेट के साथ एक ही व्यवहार है। मैंने अपनी समस्या प्राप्त करने के लिए अपने अनुक्रमक के लिए त्रुटि के लिए कोड की प्रतिलिपि बनाई।

जैसे ही मैं de_DE पर जाता हूं और अपने स्थिर कोड को पुन: प्राप्त करता हूं

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

यह "विकृत UTF-8 वर्णों को फेंकता है, संभवतः गलत तरीके से एन्कोड किया गया है"।

इसलिए मैंने उन फ़ाइलों को देखा जो मैंने टेम्पलेट फ़ोल्डर में बदल दिए थे (अर्थात कोड / Mytheme / बैनस्लाइडर / i18n / de_DE.csv) और उन्हें WinSCP के माध्यम से डाउनलोड किया। नोटपैड ++ ने "Ansii एनकोडिंग" दिखाया - यह मुश्किल है कि मैंने अनुवाद फ़ाइल बनाने के लिए "magento i18n: collect-वाक्यांशों" का उपयोग किया।

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

ऐप / कोड / MyTheme / बैनर्सलाइडर / i18n / de_DE.csv US-ASCII

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

इसलिए मैंने नोटपैड ++ में मैन्युअल रूप से फ़ाइलों को बदल दिया, उन्हें अपलोड किया, स्थिर सामग्री को तैनात किया और सभी अनुमतियों को रीसेट किया - एन वॉयला यह काम करता है।

तो, बग आपकी i18n सीएसवी फाइल में हो सकता है।


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

SerializerInterfaceMagento के 2.2.x संस्करण के बाद से प्राथमिकता जोड़ी गई, और एप्लिकेशन / etc / di.xml : आदि में घोषित की गई।

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

इसलिए मुझे लगता है कि आपका कैश पुराना है या SerializerInterfaceकाम नहीं कर रहा है। Magento\Framework\Serialize\SerializerInterfaceकोड में कहीं भी (निर्भरता इंजेक्शन का उपयोग करके) कॉल करके इस समस्या को डीबग करने का प्रयास करें , और जाँच करें कि कौन सा वर्ग di द्वारा लौटा है:

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

फिर आप अपवाद संदेश के बाद json त्रुटि देख सकते हैं। हो सकता है आपका डेटा टूट गया हो। ध्यान रखें कि मैगेंटो अपडेट के दौरान सेटअप अपग्रेड स्क्रिप्ट में सभी पुराने डेटा को अनसोनाइज और सीरीज़ किया जाना चाहिए।

पुनश्च: पूरा डिबगिंग के बाद कोर फ़ाइलों को वापस करने के लिए मत भूलना! बेहतर तरीका है कि उद्देश्य के लिए xDebug का उपयोग करें।


2
आपको उस डिबगर-हेल्पर को एक मुख्य पैच बनाना चाहिए - या सुझाव दें कि वे SAFE PHP github.com/thecodingmachine/safe
Alex

2

मेरे मामले में UTF8 एन्कोडिंग समस्या का कारण, उत्पाद के नाम का गैर-मल्टीबाइट सुरक्षित होना था:

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

तो ए

012345678901234567890123456789012345678901234567890123456 Außengewinde 

बन गया

012345678901234567890123456789012345678901234567890123456 Au�...

यह हमारे लिए भी मुद्दा था। "mb_substr" के साथ "मूल" को प्रतिस्थापित करके इसे ixed
amesh

एक जादू की तरह काम करता है!!!
भारत सेवा

2

रूट फंक्शन से सावधान रहें। यह UTF-8 का समर्थन नहीं करता है। और इससे FPC टूट सकती है। Mb_substr का उपयोग करें


1

मैं 2.2.1 के उन्नयन के साथ एक ही मुद्दे में भागा हूं। मुझे यह आर्टिकेल बहुत मददगार लगी। http://devdocs.magento.com/guides/v2.2/ext-best-practices/tutorials/serialized-to-json-data-upgrad.html

DB में संग्रहीत डेटा को अब क्रमबद्ध नहीं किया जाना चाहिए, इसे अब JSON ऑब्जेक्ट के रूप में सहेजा जाना चाहिए।

अधिकांश मॉड्यूल एक डेटा अपडेट करते हैं जो डीबी में डेटा का खुलासा करता है और इसे JSON प्रारूप के तहत फिर से संग्रहीत करता है। (BTW इसे चलाने में काफी समय लगा ...)

इसलिए, यदि आपका कोई मॉड्यूल उस डेटा को सहेजता है जो DB में क्रमबद्ध है कि डेटा अब Magento द्वारा पठनीय नहीं हो सकता है, तो आपको एक डेटा अपग्रेड सेटअप फ़ाइल बनाने की आवश्यकता होगी। इसके अलावा, यह एक 3rd पार्टी मॉड्यूल हो सकता है जिसे 2.2+ संगत संस्करण में अपडेट करने की आवश्यकता है।

यदि आप अपने कोड में कहीं भी अनजाने डेटा पर क्रमबद्ध करते हैं तो आपको उसे भी बदलना पड़ सकता है।

मुझे आशा है कि यह आपको इस त्रुटि के कारण बेहतर अंतर्दृष्टि प्रदान करेगा।

चीयर्स!


2.2.1 के लिए रिलीज़ नोट्स पढ़ना सुनिश्चित करें, बहुत कुछ बदल गया है, जिसमें generationफ़ोल्डर के लिए पथ भी शामिल है । ;)
drew7721

1

मैं ठीक उसी स्थिति में पहुंच गया। उपरोक्त कोड जोड़ने के बाद, मुझे "विकृत UTF-8 वर्ण मिला, संभवतः गलत तरीके से एन्कोड किया गया"

मुझे लगता है कि आप डिफ़ॉल्ट भाषा का उपयोग नहीं कर रहे हैं। भाषा को "डिफ़ॉल्ट" en_US में बदलने का प्रयास करें।

मीतांशी - फ्रंट-एंड में आप कौन सी भाषा का प्रयोग कर रहे हैं और स्थैतिक-सामग्री का निर्माण भी विफल हो रहा है?


हाय @AP, मैं उसी त्रुटि का सामना कर रहा हूं और मैं de_DE भाषा का उपयोग कर रहा हूं।
मीतांशी

En_US में परिवर्तन का प्रयास करें। तालिका core_config_data (सामान्य / स्थानीय / कोड) को en_US
AP

en_US में बदलने के बाद वही त्रुटि।
मीतांशी

मैं इसे प्राप्त करने में कामयाब रहा, लेकिन जब Fi_FI में वापस जाने की कोशिश की गई तो यह समाप्त हो गया। क्या आपने कैश साफ़ किया?
AP

हां, मैंने कैश साफ़ किया
मीतांशी

0

मेरे लिए इस तरह के एक ही चरित्र के HTML संस्करणों के साथ अनुवाद सीएसवी फ़ाइल में "ä" जैसे सभी विशेष वर्णों को बदलना था:

&auml;

फिर मैंने कैश साफ़ किया और फिर से लोड किया।

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