Программно блокирующий индексатор


Я попытался заблокировать свой индексатор программно с помощью этого кода, как я делал раньше:

$indexer = Mage::getSingleton('index/indexer');
            $indexer->lockIndexer();

Я заметил, что мой индексатор не заблокирован, и когда я заглянул в основные файлы, я увидел, что он устарел. Есть ли другой способ заблокировать индексатор? Я заглянул в него и точно ничего не увидел.

Author: Toon Van Dooren, 2013-02-01

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();
 6
Author: Ben Lessani - Sonassi, 2013-02-01 11:18:16

Вы можете заблокировать каждый индексный процесс по отдельности:

Mage::getModel('index/process')->load(x)->lock();
 2
Author: Tobias, 2013-02-01 09:29:22