magento - 在 Amazon EC2 上不断收到 redis 错误

标签 magento amazon-ec2 redis

我刚刚将我的 Magento 站点移至 Amazon EC2,但一直收到“2 次失败后连接到 Redis 失败”错误。我试图从 app/etc/local.xml 中删除 redis 配置,但仍然出现该错误。

我还尝试直接从 core_cache_option 表中禁用所有缓存选项。我不知道如何清理已经缓存的文件。 var/cache 文件夹下没有预期的缓存文件,我尝试从 redis-cli 命令提示符下刷新所有文件,但仍然不断收到此错误。

知道我还应该尝试什么吗?

<cache>
  <backend_options>
    <server><![CDATA[/var/tmp/_cache.sock]]></server>
    <port><![CDATA[0]]></port>
    <persistent><![CDATA[]]></persistent>
    <database><![CDATA[0]]></database>
    <password><![CDATA[]]></password>
    <connect_retries><![CDATA[1]]></connect_retries>
    <read_timeout><![CDATA[10]]></read_timeout>
    <automatic_cleaning_factor><![CDATA[0]]></automatic_cleaning_factor>
    <compress_data><![CDATA[1]]></compress_data>
    <compress_tags><![CDATA[1]]></compress_tags>
    <compress_threshold><![CDATA[20480]]></compress_threshold>
    <compression_lib><![CDATA[gzip]]></compression_lib>
    <use_lua><![CDATA[0]]></use_lua>
  </backend_options>
  <backend><![CDATA[Cm_Cache_Backend_Redis]]></backend>
</cache>

最佳答案

考虑到 EC2 实例是短暂的,您应该能够重新生成实例,对吗?如果那不是一个选择 —

首先,检查app/etc/ 中是否有其他 XML 文件。 Magento 将解析它在此文件夹中找到的任何 XML 文件。我见过类似下面的旅行人

$ ls app/etc/*.xml
local.xml
local.backup.xml

Magento 解析 local.xmllocal.backup.xml,备份值覆盖 local.xml 中的新值。另外,请确保您使用的是您认为的 local.xml。 Magento 在以下位置加载本地配置。添加一些临时调试以确保它正在做您认为正在做的事情。

#File: app/code/core/Mage/Core/Model/Config.php
public function loadBase()
{
    $etcDir = $this->getOptions()->getEtcDir();
    $files = glob($etcDir.DS.'*.xml');
    $this->loadFile(current($files));
    while ($file = next($files)) {
        var_dump($file);
        $merge = clone $this->_prototype;
        $merge->loadFile($file);
        $this->extend($merge);
    }
    if (in_array($etcDir.DS.'local.xml', $files)) {
        $this->_isLocalConfigLoaded = true;
    }
    return $this;
}

其次,清除缓存后,确保 Magento 重新加载配置。添加一些临时调试

#File: app/code/core/Mage/Core/Model/Config.php
public function init($options=array())
{
    $this->setCacheChecksum(null);
    $this->_cacheLoadedSections = array();
    $this->setOptions($options);
    $this->loadBase();

    $cacheLoad = $this->loadModulesCache();
    if ($cacheLoad) {
        var_dump("Loaded Config from Cache");
        return $this;
    }
    else
    {
        var_dump("Reloading configuration");     
    }

    $this->loadModules();
    $this->loadDb();
    $this->saveCache();
    return $this;
}

最后,如果您怀疑问题是基于文件的缓存未清除,请在

中放置一些调试代码
#File: app/code/core/Mage/Core/Model/Config/Options.php
public function getCacheDir()
{
    //$dir = $this->getDataSetDefault('cache_dir', $this->getVarDir().DS.'cache');
    $dir = $this->_data['cache_dir'];
    $this->createDirIfNotExists($dir);
    var_dump($dir);
    return $dir;
}

这会让您知道 Magento 从中读取的缓存目录 — 如果 Magento 无法读取本地 var,它将弹出到根级别 /var/ 文件夹。

关于magento - 在 Amazon EC2 上不断收到 redis 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24791692/

相关文章:

magento - 如何在magento中设置paypal中的当前货币?

api - Magento API V2 - 为 API 响应添加附加属性

amazon-web-services - 代理协议(protocol)可以与 AWS Application Load Balancer 一起使用吗?

clojure - 使用 taoensso.carmine 检查是否存在多个 key

amazon-web-services - AWS Redis 从外部连接

php - Magento 1.7.0.0 上的奇怪问题

Magento-修改购物车和结帐(订单检查)屏幕的标签

linux - AWS ec2 en_US.UTF-8 问题

amazon-web-services - 如何将我的 http 网站转为 https

c# - .NET Core StackExchange.Redis ConnectionMultiplexer 设置多个 redis 服务器