致命错误:升级后在非对象上调用成员函数rewrite()


12

我们尝试将Magento安装从1.7.0.2升级到1.8.0.0。现在我们在所有页面上都收到以下错误:

Fatal error: Call to a member function rewrite() on a non-object in /home/clientname/domains/domain.com/public_html/app/code/core/Mage/Core/Controller/Varien/Front.php on line 165

我们试图清除所有缓存,禁用并重新编译编译器,并为索引器重新编制索引。今天早些时候,在本地安装中一切正常。除某些订单和客户端数据外,这是相同的安装。

启用编译器后,错误将更改为:

Fatal error: Call to a member function rewrite() on a non-object in /home/clientname/domains/domain.com/public_html/includes/src/__default.php on line 17761

我们如何调试此错误?


我也升级到了1.8 magento我的矿山也有同样的问题,但是我得到的错误不在varien中……请参见以下错误:>致命错误:在>中的非对象上调用成员函数getProductAttribute() > /home/shopk3if/public_html/app/design/frontend/base/default/template/catalog/product/price.phtml>在第50行,请帮助我输入代码,因为我不是开发人员……

您确定已关闭编译吗?
brentwpeterson

@MichaelvanEijden您是否能够找出造成此问题的根本原因?
艾伦·斯托姆

1
@AlanStorm由于某种原因,在升级过程中仅传输了一部分文件。你的回答使我到了正确的地方。谢谢!
迈克尔

我遇到了同样的问题.....,但是我现在尝试用magento ZIP安装档案的内容覆盖所有文件....但是没有帮助。那将成为一个漫长的调试会话!到目前为止,Magento的任何更新都对我没有问题!
cljk 2013年

Answers:


5

看第165行

#File: app/code/core/Mage/Core/Controller/Varien/Front.php
$this->_getRequestRewriteController()->rewrite();

该方法_getRequestRewriteController应返回一个对象。由于某种原因,它没有在系统中返回对象。

看一下方法定义,我们看到以下内容

protected function _getRequestRewriteController()
{
    $className = (string)Mage::getConfig()->getNode('global/request_rewrite/model');

    return Mage::getSingleton('core/factory')->getModel($className, array(
        'routers' => $this->getRouters(),
    ));
}

Mage查看global/request_rewrite/model配置节点以查找类别名。在商店系统中,这应该是

core/url_rewrite_request

然后哪个Magento用来实例化模型。我的两个猜测是

  1. 这里有一个具有不同无效类名的模块,这阻止了Magento实例化该对象。

  2. 您的系统缺少Mage_Core_Model_Url_Rewrite_Request类文件(位于app/code/core/Mage/Core/Model/Url/Rewrite/Request.php),这是Magento 1.8中的新增功能


1
另外,请参见下面@navotjer的答案/评论。
艾伦·风暴

7

我遇到了同样的问题,除了清除缓存外,我还必须将/ var和子目录上的文件夹权限设置为777(不用担心,/ var中的.htaccess文件会阻止所有内容被“人类”读取)。


1
今天就来解决这个问题,并获得第二个答案-解开新的Magento代码库可以更改var文件夹的权限,这意味着Magneto可能会还原到具有旧缓存配置的系统var文件夹。
艾伦·风暴

+1您保存了我的一天!从1.6.0.1升级到1.9.0.1
toesslab 2014年

2

如果您有像memcached这样的缓存服务器,请尝试重新启动它。我遇到了同样的问题,并且以这种方式解决了。


或者,如果Redis:redis-cli flushall
kiatng 2015年

2

清除redis缓存;

redis-cli

FLUSHALL

它解决了问题。


2

我试图按照@AlanStorm的解释进行操作,但最终发现它是一个缓存问题。我只需要输入rm -rf *所有文件,~/public_html/var/cache然后发现该站点已正确加载。


像这样简单。从1.7升级到1.9时,我遇到了同样的问题,但是忘了清除缓存文件夹。
里卡多·马丁斯

1

我有同样的问题

Fatal error: Call to a member function rewrite() on a non-object in /home/clientname/domains/domain.com/public_html/app/code/core/Mage/Core/Controller/Varien/Front.php on line 165

删除/ var / cache中的所有内容即可解决问题


0

删除var / cache中的所有内容也为我解决了这个问题。

由于存在维护页面,因此还必须在发生此问题之前删除maintenance.flag文件。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.