我通过命令行创建了一个Magento实例并添加了一些产品。之后,为每个索引启动了重新索引进程。目前的情况是所有索引都具有状态待处理/处理。 这种情况给我带来了一些问题:
我已经执行了php shell/indexer.php reindexall
但没有改变。并且,如果我执行php shell/indexer.php --status
所有索引报告为'待定'。
由于
答案 0 :(得分:23)
第一:你想要直截了当地说出你的术语。 (这可能有点令人困惑)。 Magento指数具有三种状态之一。
pending
working
require_reindex
您可以在此处查看这些状态的常量
const STATUS_RUNNING = 'working';
const STATUS_PENDING = 'pending';
const STATUS_REQUIRE_REINDEX = 'require_reindex';
这可能令人困惑,因为Magento用来表示这些状态的图像使用不同的术语。
也就是说,当索引的状态为pending
时,Magento的UI将其表示为Ready
。当索引的状态为working
时,Magento的UI将其表示为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从web-server / web-admin运行时无法创建的文件编辑或删除。删除这些文件然后重新编制索引通常是解决此问题的最佳方法。
答案 1 :(得分:1)
这将是解决问题的第一步。
同时检查php执行时间和内存限制是否不是索引脚本未完成执行的原因。