Magento指数状态永远悬而未决

Mat*_*imB 10 php indexing zend-framework magento magento-1.7

我通过命令行创建了一个Magento实例并添加了一些产品.之后,为每个索引启动了重新索引进程.目前的情况是所有索引都有状态挂起/处理.这种情况给我带来了一些问题:

  1. 这个问题和安装过程之间有什么关系吗?(通过命令行)
  2. 这是个问题吗?由于我没有注意到任何副作用,我不是很关心它.除非它花费大量不必要的处理.
  3. 我该如何解决?

我已经执行php shell/indexer.php reindexall但没有改变.并且,如果我执行php shell/indexer.php --status所有索引报告为'待定'.

谢谢

Ala*_*orm 23

第一:你想要直截了当地说出你的术语.(这可能有点令人困惑).Magento指数具有三种状态之一.

pending
working
require_reindex
Run Code Online (Sandbox Code Playgroud)

您可以在此处查看这些状态的常量

const STATUS_RUNNING            = 'working';
const STATUS_PENDING            = 'pending';
const STATUS_REQUIRE_REINDEX    = 'require_reindex';
Run Code Online (Sandbox Code Playgroud)

这可能令人困惑,因为Magento用于表示这些状态的图像使用不同的术语.

在此输入图像描述

也就是说,当索引的状态为pending,Magento的UI表示为Ready.当索引具有状态时working,Magento的UI将其表示为Processing,等等.

令人困惑的是,indexer.php命令使用这个术语 - 而是使用更接近实际状态的术语

Pending
Require Reindex
Running
Run Code Online (Sandbox Code Playgroud)

因此,当您说上面的待处理/处理时,不清楚您的系统处于什么状态.

第二:PHP没有内置的排队系统 - 这意味着每个索引都在一个单独的PHP进程中运行.这也意味着Magento和PHP没有(简单,可靠)的方法来确定索引进程是否正在运行.为了实现STATUS_RUNNING/ Working/ Runningstatus,Magento使用锁定文件来跟踪索引的状态.这些锁文件位于

var/locks/index_process_*
Run Code Online (Sandbox Code Playgroud)

当一个索引被"卡住" STATUS_RUNNING/ Working/ Running的时间超过你的期望时,通常是因为

  1. 索引器请求退出一半,但无法清理其日志文件

  2. 文件的权限var/locks/index_process_*是PHP无法写入文件的

回复:#2 - 如果您习惯使用命令行索引器,通常最终会创建Magento从web-server/web-admin运行时无法编辑的文件或删除.删除这些文件然后重新编制索引通常是解决此问题的最佳方法.