Magento зберігає багато даних у базі даних для оптимізації роботи вашого магазину. Однак, як тільки ви оновлюєте будь-які з цих даних, система починає індексувати їх, щоб заповнити зміни в таблицях бази даних. Саме тоді у адмін панелі з’являється помилка "One or more indexers are invalid. Make sure your Magento cron job is running".

Це одна з найпоширеніших помилок Magento, з якою стикаються всі користувачі Magento під час роботи з нею.

Це може здатися просто дратівливим повідомленням в адмін панелі, але за цим стоїть набагато більше. Сьогодні ви дізнаєтеся, чому з’являється повідомлення "One or more indexers are invalid" і як це можна легко виправити з адмін панелі або через CLI.

Чому з'являється помилка "One or more indexers are invalid"?

Оскільки Magento є складною системою, у неї є спеціальна функція для автоматичного планування та виконання завдань магазину — Magento cron job. Крім розсилки листів та сповіщень, оновлення правил цін у каталозі та курсів валют, завдання cron також запускають переіндексацію.

Тому, як правило, переіндексація Magento запускається автоматично. Однак, якщо щось не так із cron задачею, ви побачите помилку "One or more indexers are invalid. Make sure your Magento cron job is running".

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

Виправлення помилки "One or more indexers are invalid" в Magento

Щоб вирішити помилку "One or more indexers are invalid", вам потрібно перевірити, чи правильно налаштовано режим переіндексування та завдання cron, і запустити переіндексацію.

1. Перевірте режим індексерів в адмінці

Перейдіть у System > Index Management і ознайомтеся з індексаторами та їх описами. Ви також можете переглянути режими індексатора та змінити їх у спадному меню Actions.

  • Update on Save — Magento автоматично переіндексується після кожного оновлення даних.
  • Update by Schedule — переіндексація виконується завданнями cron відповідно до налаштованого розкладу.
  • Invalidate Index — вимикає індексатори.

Magento Index Management

Крім того, якщо хочете, ви також можете перевірити режим і статус індексаторів через CLI:

bin/magento indexer:status

Magento Indexers Status

Примітка: якщо ви хочете змінити режим для індексаторів з адмін панелі або консолі, не забудьте перейти у режим девелопера і вимкнути cron, щоб уникнути блокування бази даних (database locks).


Щоб змінити режим:

bin/magento indexer:set-mode {realtime|schedule} [indexer]
  • realtime — задає індексаторам оновлення під час збереження
  • schedule — задає індексаторам оновлення за розкладом cron
  • indexer — список індексаторів, розділених пробілами

2. Виконайте реіндекс

Незалежно від режиму, ви можете виконати реіндекс в адмін панелі Magento або через командний рядок. Однак деякі інші команди також стануть у нагоді.

Щоб побачити всі індексери в Magento: 

php bin/magento indexer:info

Щоб переіндексувати всі індексери в Magento:

php bin/magento indexer:reindex

Щоб переіндексувати якісь окремі індексери:

bin/magento indexer:reindex [indexer]
e.g bin/magento indexer:reindex catalog_product_price

3. Перевірте крон задачі

Після того, як ви запустите переіндексацію, Magento має створити cron задачу для цього конкретного завдання. На жаль, іноді не все йде так, як очікується, тому деякі cron задачі можуть бути відсутні.

Щоб встановити відсутні cron задачів Magento:

php bin/magento cron:install

Щоб запустити всі cron задачі в Magento:

php bin/magento cron:run

Після виконання cron задачі індексери  будуть переіндексовані, а помилка "One or more indexers are invalid" в Magento 2 має бути вирішена. Крім того, якщо ви підете у System > Index Management, ви побачите, що всі індексатори було виконано.