我正在尝试为我的扩展程序创建安装脚本,由于某种原因,它不会安装脚本。该扩展名将显示在core_resource表中,但是我要创建的属性不会创建。
我非常确定该脚本甚至没有被调用,因为我在开头放置了exit()并且该站点运行得很好。
这是我的配置XML文件中的内容。这放置在全局->资源路径中:
<nie_setup> <setup> <module>Nie_Nie</module> </setup> <connection> <use>core_setup</use> </connection> </nie_setup>
我的安装脚本如下:
$installer = $this; $setup = new Mage_Eav_Model_Entity_Setup('core_setup'); $installer->startSetup(); $setup->addAttribute('customer', 'nie_admin', array( 'input' => 'text', 'type' => 'text', 'backend' => '', 'visible' => 0, 'required' => 0, 'user_defined' => 1, )); $installer->endSetup();
有什么明显的我想念的地方是脚本无法运行的原因吗?
在本文中逐步进行操作,以确保您对设置资源的功能,它们如何工作以及如何对它们进行故障排除没有任何误解。
完成此操作后,从您在此问题线程上说的所有内容看来,您似乎正在“安装”资源,但是安装脚本永远不会运行。我的猜测是您使用的版本号
//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与模块相关的所有条目。清除缓存。然后在安装程序类中找到以下位置
core_resource
app / code / core / Mage / Core / Model / Resource / Setup.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尝试运行的安装程序脚本,但是找不到。只要记住要删除模块中的行core_resource并清除缓存即可。(Magento缓存需要检查安装/升级的模块)
如果那不起作用,请开始研究的逻辑applyAllDataUpdates并弄清楚为什么该类不包括您的安装程序文件。
applyAllDataUpdates