Состояние индекса Magento ожидает навсегда - программирование
Подтвердить что ты не робот

Состояние индекса Magento ожидает навсегда

Я создал экземпляр Magento через командную строку и добавил несколько продуктов. Сразу после этого начал переиндексацию для каждого индекса. Нынешняя ситуация заключается в том, что все индексы имеют статус ожидания/обработки. Эта ситуация вызывает несколько вопросов:

  • Есть ли какое-либо отношение между этой проблемой и процессом установки? (через командную строку)
  • Это проблема? Поскольку я не заметил никаких побочных эффектов, я не очень беспокоюсь об этом. Если только он не потратит тонны ненужной обработки.
  • Как я могу это исправить?

Я уже выполнил php shell/indexer.php reindexall, но ничего не изменилось. И, если я выполняю php shell/indexer.php --status, все индексы сообщают как "Ожидание".

Спасибо

4b9b3361

Ответ 1

Во-первых: Вы хотите получить свою терминологию прямо. (это может быть немного запутанным). Индекс Magento имеет один из трех статусов.

pending
working
require_reindex

Вы можете увидеть константы для этих статусов здесь

const STATUS_RUNNING            = 'working';
const STATUS_PENDING            = 'pending';
const STATUS_REQUIRE_REINDEX    = 'require_reindex';

Это может сбивать с толку, потому что изображение, которое Magento использует для представления этих статусов, использует другую терминологию.

enter image description here

То есть, когда индекс имеет статус pending, пользовательский интерфейс Magento представляет это как Ready. Когда индекс имеет статус working, пользовательский интерфейс Magento представляет это как Processing и т.д.

Дальнейшие запутывающие вещи, команда indexer.php не использует эту терминологию - вместо этого она использует термины ближе к фактическому состоянию

Pending
Require Reindex
Running

Итак, когда вы говорите "Ожидание/Обработка" выше, он не понимает, в каком состоянии находится ваша система.

Во-вторых: PHP не имеет встроенной системы очередей - это означает, что каждый индекс работает в отдельном PHP-процессе. Это также означает, что Magento и PHP не имеют (простой, надежный) способ определить, работает ли индексный процесс. Чтобы реализовать статус STATUS_RUNNING/working/Running, Magento использует файлы блокировки для отслеживания статуса индекса. Эти файлы блокировки расположены в

var/locks/index_process_*

Когда индекс "застревает" в STATUS_RUNNING/working/Running дольше, чем вы ожидали, обычно это происходит потому, что

  • Запрос индексатора завершается наполовину и не удалось очистить файлы журнала

  • Разрешения файлов в var/locks/index_process_* таковы, что PHP не может записывать файлы

Re: # 2 - Если вы привыкли использовать индексатор командной строки, вы можете часто создавать файлы, которые Magento при запуске с веб-сервера/веб-администратора не сможет для редактирования или удаления. Удаление этих файлов, а затем переиндексация часто является лучшим способом устранить эту проблему.

Ответ 2

в папке var/locks удаляет файл .lock, который был создан.

Это первый шаг в решении.

Также проверьте, не являются ли время выполнения программы и ограничение памяти не для индексации script, не завершая ее выполнение.