Ответ 1
Во-первых: Вы хотите получить свою терминологию прямо. (это может быть немного запутанным). Индекс Magento имеет один из трех статусов.
pending
working
require_reindex
Вы можете увидеть константы для этих статусов здесь
const STATUS_RUNNING = 'working';
const STATUS_PENDING = 'pending';
const STATUS_REQUIRE_REINDEX = 'require_reindex';
Это может сбивать с толку, потому что изображение, которое Magento использует для представления этих статусов, использует другую терминологию.
То есть, когда индекс имеет статус 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 при запуске с веб-сервера/веб-администратора не сможет для редактирования или удаления. Удаление этих файлов, а затем переиндексация часто является лучшим способом устранить эту проблему.