Magento 2 reindex не повертає


14

Я успішно перемістив каталог з Magento 1.9.2.3 на Magento 2.0.2. Після міграції я повторно встановив за допомогою команди php bin/magento indexer:reindex.

Все успішно переосмислюється, за винятком індексів catalog_category_productі catalog_product_category, повертаючись No such entity.у оболонці та сповіщення Reindex Requiredадміністратора. Я перевірив, var/log/але помилок не було.

Як результат, продукти додаються до категорій у заднім часі, але категорії відображаються порожніми на фронті.

Що може спричинити цю проблему? Як я можу налагоджувати?


Відповіді:


7

Окрім Рафаеля:

Я налагоджував цей код, змінюючи конструктор винятків для цілей налагодження (або xdebug, або старі дампи). Наразі змінити конструкцію винятку (файл є \lib\internal\Magento\Framework\Exception\NoSuchEntityException.php)

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

Після цього перейдіть на один стек і перевірте наведені аргументи (аргументи також доступні в backbuce налагодження, але скидання об'єктів magento насправді не зручно для браузера).

Прийшов до висновку, що саме 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=> індекс каталогу_продукту_категорії

На щастя, другий розширює перший, так що у вас є одна відправна точка.

Ви повинні мати на увазі, що кожен клас цього індексатора використовує класи рядків дій для обробки повторного деіндексування:

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

Мені саме тут слід почати налагодження, оскільки ті класи рядків дій є прямими класами, які перевстановлюють ці два індекси.

Я дуже сподіваюся, що це допоможе вам знайти свою проблему.


Привіт @Raphael, у мене є подібний випуск для створення клієнтів після міграції. Допоможіть мені magento.stackexchange.com/q/236187/24878
akgola

0

ЦЕ РОБОТИ ДЛЯ МНЕ ПІСЛЯ ПІДГОТОВКИ ВСІХ.

Якщо припустити, що ваш сайт увімкнено Developer Mode, ви можете змінити його Production Modeта очистити / очистити кеш, а потім перейти до Developer Mode.

У мене ця проблема була на передньому кінці, оскільки я нещодавно перемістив базу даних з одного сервера на інший. Мені вдалося вирішити таким чином.

НАДІЯ ЦІЙ ДОПОМОГУЄ НЕЩОГО.



0

Ця помилка, в моєму випадку, стосувалася налаштування кількох доменів, розміщення кількох доменів. Magento урізує коди магазинів. Якщо ви збираєте домени для зберігання кодів, переконайтеся, що код магазину відповідає маршрутизації, визначеній у index.php (або де б ви не вказали). У розділі "Магазини" > " Усі магазини " перевірте адміністратора . Перевірте свій веб-сайт, зберігайте та зберігайте коди магазинів.

Одного разу я зрозумів, що Magento урізав код магазину, який я ввів, і здійснив те саме коригування у картографуванні, і все почало працювати знову.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.