php - Magento 索引状态永远挂起

标签 php magento zend-framework indexing magento-1.7

我已经通过命令行创建了一个 Magento 实例并添加了一些产品。紧接着,开始了每个索引的重新索引过程。目前的情况是所有索引的状态都是pending/processing。 这种情况给我带来了几个问题:

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

我已经执行了 php shell/indexer.php reindexall 但没有任何改变。而且,如果我执行 php shell/indexer.php --status,所有索引都报告为“待处理”。

谢谢

最佳答案

首先:您需要弄清楚术语。 (这可能有点困惑)。 Magento 索引具有三种状态之一。

pending
working
require_reindex

你可以在这里看到这些状态的常量

const STATUS_RUNNING            = 'working';
const STATUS_PENDING            = 'pending';
const STATUS_REQUIRE_REINDEX    = 'require_reindex';

这可能会造成混淆,因为 Magento 用来表示这些状态的图像使用不同的术语。

enter image description here

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

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

Pending
Require Reindex
Running

因此,当您在上面说 Pending/Processing 时,并不清楚您的系统处于什么状态。

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

var/locks/index_process_*

当索引“卡在”STATUS_RUNNING/Working/Running 中的时间比您预期的要长时,这通常是因为

  1. 索引器请求中途退出,未能清理其日志文件

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

回复:#2——如果您习惯于使用命令行索引器,您最终可能会创建 Magento 在从网络服务器/网络管理运行时无法创建的文件编辑或删除。删除这些文件然后重新编制索引通常是解决此问题的最佳方法。

关于php - Magento 索引状态永远挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20861438/

相关文章:

php - Twilio PHP - SSL 证书 : self signed certificate in certificate chain

php - Codeigniter 字符编码问题

php - 将 div 添加到循环中的每一行

magento - 按类别名称搜索

jquery - zend Framework jquery ui 选项卡式内容,如何从部分点击加载内容?

php - 我不明白为什么我的变量为NULL

javascript - 如何在 PHP 上使用输入搜索下拉列表

php - magento 中的 reindexall() 与 reindexeverything() 有什么区别?

Magento Ajax 登录 - 通过 SSL

api - YouTube GData API