Magento 2 reindex ส่งกลับไม่มีเอนทิตีดังกล่าว


14

ฉันย้ายข้อมูลแคตตาล็อกจาก Magento 1.9.2.3 ไปเป็น Magento 2.0.2 เรียบร้อยแล้ว หลังจากการโยกย้ายผม Reindex php bin/magento indexer:reindexใช้คำสั่ง

ทั้งหมดถูกทำดัชนีใหม่สำเร็จยกเว้นดัชนีcatalog_category_productและcatalog_product_categoryกลับมาNo such entity.ในเชลล์และการแจ้งเตือนReindex Requiredในผู้ดูแลระบบ ฉันได้ตรวจสอบแล้วvar/log/แต่ไม่มีข้อผิดพลาด

ดังนั้นผลิตภัณฑ์จะถูกเพิ่มลงในหมวดหมู่ในส่วนหลัง แต่หมวดหมู่จะแสดงว่างในส่วนหน้า

สิ่งที่อาจทำให้เกิดปัญหานี้ ฉันจะดีบักได้อย่างไร


โดยทั่วไปแล้วmagento.stackexchange.com/questions/102739/ …
Patrick-Peng

คำตอบ:


7

นอกจากราฟาเอลแล้ว:

ฉันแก้ไขรหัสนี้ด้วยการเปลี่ยนคอนสตรัคเตอร์ข้อยกเว้นเพื่อวัตถุประสงค์ในการดีบั๊ก แก้ไขโครงสร้างของข้อยกเว้นสำหรับตอนนี้ (ไฟล์\lib\internal\Magento\Framework\Exception\NoSuchEntityException.php)

$trace = debug_backtrace();
var_dump($trace[1]['class'] . '::' . $trace[1]['function'] . '('.$trace[1]['line'] .')';
die();

หลังจากนั้นขึ้นไปหนึ่งสแต็กและตรวจสอบข้อโต้แย้งที่ได้รับ (args ยังมีอยู่ใน backtrace ดีบั๊ก แต่การทิ้งวัตถุวีโอไอพีไม่เป็นมิตรกับเบราว์เซอร์จริงๆ)

มาถึงข้อสรุปว่ามันอยู่ในstoreGroupRepositoryที่ที่ไม่สามารถหารหัสกลุ่มได้ พุ่งเข้าไปในตารางร้านค้าและเห็นสองสามบรรทัดในตารางร้านค้าที่อ้างอิงถึงสิ่งstore_groupที่ไม่ได้อยู่ในstore_groupตาราง (กลุ่มร้านค้าไม่มีอยู่ในตารางที่เกี่ยวข้อง)

ลบเส้นเก็บที่ผิดพลาดและข้อผิดพลาดได้หายไปนับตั้งแต่

แต่โปรดจำไว้ว่ามันอาจอยู่ในตาราง / เหตุผลอื่น ตัวอย่างเช่นเว็บไซต์จัดเก็บเองหรือจัดเก็บกลุ่มในกรณีนี้ ดังนั้นนั่นเป็นการค้นหาเพียงเล็กน้อยที่คุณต้องทำเอง

นอกจากนี้ยังพบว่ามีการอ้างอิงจำนวนมากไปยังร้านค้าเหล่านี้และลบออกด้วยตนเองใน db นี่อาจเป็นงานที่น่าเบื่อ แต่มันจะแก้ปัญหาได้

และอย่าลืมลบแฮ็กของคุณ


ทำไมคุณไม่ใช้ xdebug แทนล่ะ
ลุค

@TimVroom ฉันมีข้อผิดพลาดเดียวกันโปรดช่วยฉัน magento.stackexchange.com/q/236187/24878
akgola

11

ไม่แน่ใจว่ามันจะสายเกินไปหรือไม่ แต่เมื่อฉันมีสิ่งนี้ดูเหมือนว่าจะเกิดจากรหัสเอนทิตี้บางอย่างที่จำเป็นต้องตั้งค่าเป็น 0

สคริปต์นี้เหมาะกับฉัน:

SET FOREIGN_KEY_CHECKS=0;
UPDATE `store` SET store_id = 0 WHERE code='admin';
UPDATE `store_group` SET group_id = 0 WHERE name='Default';
UPDATE `store_website` SET website_id = 0 WHERE code='admin';
UPDATE `customer_group` SET customer_group_id = 0 WHERE customer_group_code='NOT LOGGED IN';
SET FOREIGN_KEY_CHECKS=1;

หวังว่ามันจะช่วย


สิ่งนี้ช่วยฉันได้มากขอบคุณสำหรับการแบ่งปัน!
favo

สิ่งนี้ได้ผลกับฉันด้วย :)
โอเว่น

3

ตกลงเพื่อให้เกิดข้อผิดพลาดมาจากNo such entity.\lib\internal\Magento\Framework\Exception\NoSuchEntityException.php

คลาสนี้เป็นคลาสยกเว้นที่กำหนดเองของ Magento และมีการใช้งานมากใน Magento 2

เมื่อใดก็ตามที่คุณเห็นรหัสเช่น:

catch (NoSuchEntityException $e)

หรือ

throw NoSuchEntityException;

กำลังใช้คลาสนี้อยู่

ปัญหาในกรณีของคุณคือมันยากที่จะค้นหาว่ามีการโยนข้อยกเว้นนั้นไปที่ไหน

ดังนั้นเมื่อต้องการ จำกัด ให้แคบลงคุณสามารถเริ่มต้นการดีบักสองคลาสที่เกี่ยวข้องกับดัชนีของคุณที่ล้มเหลว:

  • Magento\Catalog\Model\Indexer\Category\Product=> catalog_category_productดัชนี
  • Magento\Catalog\Model\Indexer\Product\Category=> catalog_product_categoryดัชนี

โชคดีที่อันที่สองขยายอันแรกออกไปเพื่อให้คุณมีจุดเริ่มต้นหนึ่งจุด

คุณต้องจำไว้ว่าแต่ละคลาสตัวทำดัชนีนี้ใช้คลาสของแถวแอ็คชันเพื่อประมวลผลการทำดัชนีใหม่:

  • Magento\Catalog\Model\Indexer\Product\Category\Action\Rows
  • Magento\Catalog\Model\Indexer\Category\Product\Action\Rows

สำหรับฉันนั่นคือที่ที่คุณควรเริ่มทำการดีบั๊กเนื่องจากคลาสของแถวแอ็คชันเหล่านั้นเป็นคลาสโดยตรงที่มีการสร้างดัชนีใหม่สองดัชนีนั้น

ฉันหวังว่ามันจะช่วยคุณค้นหาปัญหาของคุณ


สวัสดี @ ราฟาเอลฉันมีปัญหาที่คล้ายกันสำหรับการสร้างลูกค้าหลังจากการโยกย้ายโปรดช่วยฉัน magento.stackexchange.com/q/236187/24878
akgola

0

สิ่งนี้ได้ผลกับฉันหลังจากพยายามทุกอย่าง

สมมติว่าเว็บไซต์ของคุณอยู่ในDeveloper Modeคุณสามารถเปลี่ยนมันProduction Modeและชัดเจน / Developer Modeล้างแคชแล้วสลับกลับไป

ฉันมีปัญหานี้ในส่วนหน้าเนื่องจากฉันเพิ่งย้ายฐานข้อมูลจากเซิร์ฟเวอร์หนึ่งไปยังอีก ฉันจัดการเพื่อแก้ปัญหาด้วยวิธีนี้

หวังว่าสิ่งนี้จะช่วยให้ใครบางคน



0

ในกรณีของฉันข้อผิดพลาดนี้มีไว้สำหรับการตั้งค่าหลายโดเมนและหลายโดเมน วีโอไอพีตัดทอนรหัสร้านค้า หากคุณกำลังจับคู่โดเมนกับรหัสร้านค้าตรวจสอบให้แน่ใจว่ารหัสร้านค้าตรงกับเส้นทางที่ระบุใน index.php (หรือที่ใดก็ได้ที่คุณจับคู่) ในการตรวจสอบผู้ดูแลระบบภายใต้"ร้านค้า" > " ร้านค้าทั้งหมด " ตรวจสอบเว็บไซต์ร้านค้าและร้านค้าดูรหัสร้านค้า

เมื่อฉันรู้ว่าวีโอไอพีตัดทอนรหัสร้านค้าที่ฉันป้อนและทำการปรับเปลี่ยนแบบเดียวกันในการทำแผนที่และทุกอย่างก็เริ่มทำงานอีกครั้ง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.