无法覆盖Magento块(可能与缓存有关)


Cannot Override Magento Block (Possibly Cache Related)

由于一些奇怪的原因,我无法在生产服务器上覆盖Mage_Catalog_Block_Product_List

我让Magento在我开发的地方本地运行,然后我rsync到我的生产服务器,所以我很确定文件系统是相同的(除了缓存)。

以下是我到目前为止所做的工作-请注意,这在本地运行得很好,只是由于某种原因而不能在我的生产服务器上运行:

  • 创建了app/code/local/Mage/Catalog/Block/Product/List.php以覆盖Core版本。

  • 添加了必要的代码,在本地测试,效果良好。更新后的代码只是更新_getProductCollection()函数,这样,如果设置了$_GET['newest'],Magento就可以按created_at日期降序对产品进行排序。这在本地运行良好

  • rsync将我的更新发送到生产服务器。不起作用,所以我认为它与缓存有关。

  • 关闭缓存,刷新索引。还是什么都没有。

  • 删除了var/cache文件,仍然没有。

  • 比较后端配置,看看是否有什么问题。一切看起来都很好。

  • 在生产版本的新块(List.php)中添加了无效代码,因此会导致错误。没有错误(?!)。就好像我上传的新文件被忽略了一样。

任何想法都将不胜感激,因为我不知所措。

我在Magento v 1.7.0.2

您的生产服务器是否使用Magento编译模式?Magento编译模式并不是真正的编译,它只是将代码冷却后的所有类文件复制到一个文件夹中。这大大加快了PHP(尤其是旧版本)的速度。如果您已经将一个新文件上载到本地代码池进行重写,并且您正在使用编译模式,则可能需要重新编译类(System -> Tools -> Compilershell/文件夹中的命令行脚本)。

此外,您的生产系统是否使用APC?如果是这样,那么PHP已经将类的旧版本缓存到APC中,并且在清除APC缓存之前不会查看新版本。

最后,您是从Mac/Windows机器上传到unix环境吗?如果是这样的话,试着仔细查看文件中的大小写敏感性错误。我通常会从根文件夹中尝试显式的ls,以确保文件路径的命名与我想象的一样。

希望能有所帮助!