在管理员下清除Magento中的缓存后,我发现503错误,"服务暂时不可用"。需要说明的是,这是由清除缓存'var/cache'
引起的。这与可能导致相同或类似问题的维护问题无关(由已删除的maintenance.flag
文件解决)。应用程序的根目录中不存在维护标志。我已经尝试过研究这个问题,似乎每个帖子都会回到维护问题。
有一点需要注意; 503错误是Web Server生成的。维护问题返回503但是应用程序(Magento)返回它;所以你看到应用程序徽标,链接等等。
我已检查过Web服务器日志,并且正在生成以下错误:
539 access forbidden by rule, client: 165.225.138.177, server: , request: "POST /app/etc/local.xml HTTP/1.1"
我查了一下文件,这对我来说显而易见,这是由于所有权冲突;我更改了文件所有者,但问题仍然存在。
检查Magento错误日志var/reports
,我看到以下错误:
the error log (var/reports) reflects the following error: "Mage registry key "_singleton/" already exists"
完整的错误是:
a:5:{i:0;s:46:"Mage registry key "_singleton/" already exists";i:1;s:1157:"
#0 /data/html/app/Mage.php(223): Mage::throwException('Mage registry k...')
#1 /data/html/app/Mage.php(477): Mage::register('_singleton/', false)
#2 /data/html/app/code/core/Mage/Core/Model/Factory.php(81): Mage::getSingleton(false, Array)
#3 /data/html/app/code/core/Enterprise/UrlRewrite/Model/Url/Rewrite.php(94): Mage_Core_Model_Factory->getSingleton(false)
#4 /data/html/app/code/core/Enterprise/UrlRewrite/Model/Url/Rewrite/Request.php(114): Enterprise_UrlRewrite_Model_Url_Rewrite->loadByRequestPath(Array)
#5 /data/html/app/code/core/Enterprise/UrlRewrite/Model/Url/Rewrite/Request.php(58): Enterprise_UrlRewrite_Model_Url_Rewrite_Request->_loadRewrite()
#6 /data/html/app/code/core/Mage/Core/Model/Url/Rewrite/Request.php(116): Enterprise_UrlRewrite_Model_Url_Rewrite_Request->_rewriteDb()
#7 /data/html/app/code/core/Mage/Core/Controller/Varien/Front.php(165): Mage_Core_Model_Url_Rewrite_Request->rewrite()
#8 /data/html/app/code/core/Mage/Core/Model/App.php(365): Mage_Core_Controller_Varien_Front->dispatch()
#9 /data/html/app/Mage.php(684): Mage_Core_Model_App->run(Array)
#10 /data/html/index.php(83): Mage::run('default', 'store')
#11 {main}
";s:3:"url";s:1:"/";s:11:"script_name";s:10:"/index.php";s:4:"skin";s:7:"default";}
任何人都可以提供有关可能导致此问题的任何意见吗?
答案 0 :(得分:7)
首先,对谷歌的后代来说更是如此,绝对确定
maintenance.flag
个文件
test.txt
并确保您可以访问它)假设您已完成上述操作 - 很多地方Magento系统都不会返回503错误。第1步应该检查以下
var/report
错误报告文件有关错误的任何特定上下文。第三方扩展很可能产生503。
这里有Magento安装(CE和EE)库存中的一些产生503错误的东西(EE代码因模糊担心不明确的许可/合理使用而被排除在外)
如果您使用Redis作为缓存服务器并且其锁定系统不堪重负,系统可能会开始产生503错误。
#File: app/code/community/Cm/RedisSession/Model/Session.php
// Limit concurrent lock waiters to prevent server resource hogging
if ($waiting >= $this->_maxConcurrency) {
// Overloaded sessions get 503 errors
$this->_redis->hIncrBy($sessionId, 'wait', -1);
$this->_sessionWritten = TRUE; // Prevent session from getting written
$writes = $this->_redis->hGet($sessionId, 'writes');
if ($this->_logLevel >= 4)
{
Mage::log(
sprintf("%s: Session concurrency exceeded for ID %s; displaying HTTP 503 (%s waiting, %s total requests)\n %s (%s - %s)",
$this->_getPid(),
$sessionId, $waiting, $writes,
Mage::app()->getRequest()->getRequestUri(), Mage::app()->getRequest()->getClientIp(), Mage::app()->getRequest()->getHeader('User-Agent')
),
Zend_Log::WARN, self::LOG_FILE
);
}
require_once(Mage::getBaseDir() . DS . 'errors' . DS . '503.php');
exit;
}
如果PayPal IPN控制器终端无法找到订单,它将抛出503
#File: app/code/core/Mage/Paypal/Model/Ipn.php
if (empty($this->_order)) {
// get proper order
$id = $this->_request['invoice'];
$this->_order = Mage::getModel('sales/order')->loadByIncrementId($id);
if (!$this->_order->getId()) {
$this->_debugData['exception'] = sprintf('Wrong order ID: "%s".', $id);
$this->_debug();
Mage::app()->getResponse()
->setHeader('HTTP/1.1','503 Service Unavailable')
->sendResponse();
exit;
}
//...
}
Enterprise Edition可以返回503 in
app/code/core/Enterprise/Staging/Model/Observer.php
如果内容分段配置值为true。
EE也可以返回503 in
app/code/core/Enterprise/WebsiteRestriction/Model/Observer.php
如果您在私人销售模式下运行且无权查看销售。
答案 1 :(得分:4)
我已经纠正了这个问题。经过一番挖掘后,我终于找到了一个Stack帖子(在同一个主题中的许多帖子中),它有以下解决方案。你可以在这里阅读帖子: https://magento.stackexchange.com/questions/51598/mage-registry-key-singleton-weee-observer-already-exists
建议执行这些命令:
php -f shell/compiler.php disable
php -f shell/compiler.php clear
php -f shell/compiler.php compile
我玩弄了这个;包括启用/禁用,然后我删除了缓存var/cache
。当我重新运行页面时,它工作。
非常感谢所有发布的人;当我排除问题并找到解决方案时,我觉得一切都有所帮助。
答案 2 :(得分:0)
除了已经提出的建议之外,您可能还想检查您的服务器是否有可用磁盘空间。我刚刚遇到了这个问题,我花了15分钟才意识到自动备份后唯一的问题是可用空间。