Программно блокирующий индексатор
Я попытался заблокировать свой индексатор программно с помощью этого кода, как я делал раньше:
$indexer = Mage::getSingleton('index/indexer');
$indexer->lockIndexer();
Я заметил, что мой индексатор не заблокирован, и когда я заглянул в основные файлы, я увидел, что он устарел. Есть ли другой способ заблокировать индексатор? Я заглянул в него и точно ничего не увидел.
2 answers
Вы могли бы просто touch
файл блокировки.
<?php touch('BP.DS.'var'.DS.'locks'.DS.'index_process_1.lock')
Или
#!/bin/bash
touch /home/path/public_html/var/locks/index_process_1.lock
Очевидно, что это решение низкого качества, но если бы вы хотели выполнить это действие периферийно в Magento (например, из скрипта bash
, это было бы подходящим).
В противном случае необходимые вам методы находятся в Mage_Index_Model_Process
Такие, как isLocked()
, lockAndBlock()
, и unlock()
Предполагая, что ваш модуль расширяет указанный класс, вам нужно только объявить
const PROCESS_ID = 'my_indexer'
И использовать методы в качестве соответствующий
$this->lockAndBlock();
Вы можете заблокировать каждый индексный процесс по отдельности:
Mage::getModel('index/process')->load(x)->lock();