通过本文,确保您对设置资源的作用、工作原理以及如何对其进行故障排除没有任何误解。
一旦你做到了这一点,从你在这个问题线程上所说的一切来看,听起来你正在“安装”你的资源,但你的安装脚本永远不会运行。我的猜测是,您使用的版本号
//0.0.1 is your version number
mysql4-install-0.0.1.php
与模块的版本不匹配
<modules>
<Nie_Nie>
<version>?.?.?</version>
</Nie_Nie>
</modules>
这些应匹配脚本才能运行。我认为Magento足够聪明,如果找到以前的版本,它可以运行它们,但是设置资源中的代码是难以遵循的那种,所以我总是确保它们匹配。
无论如何,下面介绍了如何查看 magento 在运行安装资源时尝试运行的文件。删除与模块相关的任何条目。清除缓存。然后在安装程序类中找到以下位置core_resource
应用程序/代码/核心/法师/核心/模型/资源/设置.php:
protected function _modifyResourceDb($actionType, $fromVersion, $toVersion)
{
...
$sqlFilesDir = Mage::getModuleDir('sql', $modName).DS.$this->_resourceName;
if (!is_dir($sqlFilesDir) || !is_readable($sqlFilesDir)) {
return false;
}
...
$sqlDir->close();
if (empty($arrAvailableFiles)) {
return false;
}
...
$arrModifyFiles = $this->_getModifySqlFiles($actionType, $fromVersion, $toVersion, $arrAvailableFiles);
if (empty($arrModifyFiles)) {
return false;
}
然后修改它们以添加一些临时调试异常
if (!is_dir($sqlFilesDir) || !is_readable($sqlFilesDir)) {
throw new Exception("$sqlFilesDir not found");
return false;
}
...
if (empty($arrAvailableFiles)) {
throw new Exception("No files found to run");
return false;
}
...
$arrModifyFiles = $this->_getModifySqlFiles($actionType, $fromVersion, $toVersion, $arrAvailableFiles);
if (empty($arrModifyFiles)) {
throw new Exception("No valid upgrade files found to run for ");
return false;
}
throw new Exception("If you're getting here, we have a file. Remove your exceptions here and place one in your installer to make sure it's the one you think it is.");
重新加载页面,您将收到异常文本,抱怨Magento找不到的任何内容。这应该足以帮助您跟踪Magento尝试运行的安装程序脚本,但未能找到。只需记住删除模块的行并清除缓存即可。(Magento缓存哪些模块需要检查安装/升级)core_resource
如果这不起作用,请开始深入研究 的逻辑,并找出该类不包含安装程序文件的原因。applyAllDataUpdates