Magento db连接参数不会改变,疯狂缓存?

Don*_*ggs 4 database connection caching magento

我已将整个www目录从我们的Web服务器复制到本地工作站.我想让Magento连接到本地数据库.是的,我更改了'magento/app/etc/local.xml'文件中的连接字符串值.我已经验证了大约一百次它被改变了.在你告诉我它被缓存之前,我已经删除了整个'magento/var/cache'目录,只是为了安全,并且在www目录中为我们的'secret_password'添加了所有文件.以下是我的local.xml文件的摘录.

<host><![CDATA[localhost]]></host>
<username><![CDATA[root]]></username>
<password><![CDATA[root]]></password>
<dbname><![CDATA[dev_xarisma]]></dbname>
Run Code Online (Sandbox Code Playgroud)

我在我的笔记本电脑上试过这个,并且确实发现缓存是个问题.花了我几个小时来搞清楚.但是我终于抛弃了'Varien_Db_Adapter_Pdo_Mysql'对象,就在那时我看到它获得的值不是我在'local.xml'文件中设置的值; 看下面的部分转储.

    [_config:protected] => Array
    (
        [host] => localhost
        [username] => root
        [password] => (*secret_pass_you_cant_see*)
        [dbname] => production_xarisma
Run Code Online (Sandbox Code Playgroud)

我终于想通过在WWW目录中获取我们的强密码来缓存旧的登录凭据.我很惊讶地发现magento/var/cache文件中的一堆文件.我删除了有问题的文件,这解决了我的笔记本电脑上的问题.但是,它不能在工作站上运行.我删除了整个var目录,行为仍在继续.我甚至多次重启我的工作站,以防它被Apache缓存,但没有运气.

笔记本电脑和工作站都运行Ubuntu 31.10,使用Apache2,当前的mySql,两者都没有什么特别之处.如果你想知道为什么我会这么疯狂地"将生产服务器克隆到我的工作站"程序,这是因为我们试图解决仅在生产中的问题.是的,我检查了所有甚至看起来相关的文章.先感谢您.

Don*_*ggs 9

好的,这花了我两天的时间来追踪.但我发现的是一个bug或一个功能,我不知道.

问题是'magento/app/etc'目录中有一个ANOTHER文件,它在'local.xml'文件中覆盖了正确的数据库连接参数.该文件名为"localOLD.xml".显然,有人想要备份我们的数据库设置以确保安全; 一个好主意.但显然,Magento正在阅读那个文件,而不是'local.xml'.

我真的很惊讶它一删除该文件就开始工作了.事实上,我不相信.所以我制作了一个'local.xml'的副本,称为'localOLD.xml',为连接参数输入了一些测试值,Magento尝试使用它们.

这是一个错误还是一个功能?任何人?

  • 伙计们,重要的安全提示.始终更改要备份的任何文件的FILE EXTENSION.Magento将读取以.xml结尾的所有文件,无论您是否想要它. (4认同)

Ala*_*orm 5

当这种情况发生时,它总是一种痛苦.

首先 - 您确定生产服务器正在使用文件系统进行缓存吗?许多生产系统被设置为缓存到其他东西,如redis,memcache等.通过管理UI或n98-magerun之类的工具(如果可能)清除缓存总是一个好主意.

第二 - 你确定要删除正确的缓存文件夹吗?如果Magento var由于PHP权限而无法写入文件夹,则会将其缓存文件存储在系统临时文件夹中.

这个方法中的一些调试代码

#File: app/code/core/Mage/Core/Model/Config/Options.php
public function getVarDir()
{
    //$dir = $this->getDataSetDefault('var_dir', $this->getBaseDir().DS.'var');
    $dir = isset($this->_data['var_dir']) ? $this->_data['var_dir']
        : $this->_data['base_dir'] . DS . self::VAR_DIRECTORY;
    if (!$this->createDirIfNotExists($dir)) {
        $dir = $this->getSysTmpDir().DS.'magento'.DS.'var';
        if (!$this->createDirIfNotExists($dir)) {
            throw new Mage_Core_Exception('Unable to find writable var_dir');
        }
    }
    return $dir;
}
Run Code Online (Sandbox Code Playgroud)

应该揭示Magento从哪里加载它的文件缓存数据.

var_dump($dir);
return $dir;
Run Code Online (Sandbox Code Playgroud)