5

我们的开发和生产环境有不同的数据库 IP 地址。我们的开发环境在我们的开发人员机器上本地运行,并指向我们本地网络上的单个开发数据库服务器。我们的生产环境使用托管在 RackSpace 上的数据库,并托管在他们的本地网络上。不知何故,我们的开发 IP 地址似乎已在生产环境中被缓存。这是我到目前为止所做的:

  • 验证生产上app/etc/local.xml中的IP地址是否正确。
  • 删除了 var/cache/* 和 var/full_page_cache/* 的内容
  • 重新启动我们的 memcached 服务器以清除那里的任何奇怪缓存
  • grep了我们整个代码库的开发IP地址
  • 转储 mysql 数据库并为开发 IP 转储(我们绝望了)
  • 删除了 /tmp 的内容
  • 禁用自定义模块

这已经工作了数周没有问题。当我禁用配置缓存时,问题就开始了。我知道你在想什么,它刚刚终于获得了自上次清除缓存以来某人所做的配置更改。这就说得通了。没有意义的是我已经清除了上面提到的每个缓存,使用 MageTool 启用了配置缓存,一切都像一个魅力。

4

1 回答 1

9

事实证明,修复整个事情是一个两步过程。

因为我们的生产和开发环境需要不同的 IP ,所以app/etc/local.xml没有跟踪,而是我们跟踪app/etc/local-example.xml,以便我们所有的开发人员可以快速轻松地将其复制到app/etc/local.xml并启动和运行。这已成为一种公司标准,我们在所有其他项目中都使用它。幸运的是,我的一位同事发现Magento 将所有 xml 文件加载到app/etc/.

所以,不,我们的开发 IP 并没有神奇地缓存在某个疯狂的模糊位置,我们只是无意中加载了它。将该文件重命名为它后,app/etc/local.xml.example它停止引用我们的开发 IP。耶!

现在,这与问题没有直接关系,但因为解决方案引入了一个新错误,我想提一下。一旦我们重命名了 xml 文件并清除了所有缓存,我们开始看到一个新错误。

PHP Fatal error: Call to a member function setQueryHook() on a non-object in app/code/core/Mage/Core/Model/Resource/Setup.php on line 347

在我们的示例文件中,我们在单个<default_setup />节点内定义了我们的数据库资源。对于我们的生产环境,我们实际上有一个 Triple-m 设置,具有用于读取和写入查询的单独 IP,因此用于生产而不是我们拥有的单个<default_setup />节点<default_read /><default_write />节点。我一直无法找到关于资源中允许和要求的确切内容的文档,但读/写拆分是根据另一篇关于该主题的 StackOverflow 帖子中的说明设置的,直到今天,效果都很好。

凭直觉,我将<default_write />节点重命名为<default_setup />,一切都神奇地重新开始工作。我还不确定读写是否正确拆分,但是一旦我确认一切正常,我会更新这个答案。

于 2013-01-24T17:59:58.023 回答