我的 Magento 扩展安装脚本无法运行

2022-08-30 14:40:46

我正在尝试为我的扩展创建安装脚本,但由于某种原因,它不会安装脚本。扩展将显示在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();

我在这里是否遗漏了一些明显的东西,这将是脚本无法运行的原因?


答案 1

通过本文,确保您对设置资源的作用、工作原理以及如何对其进行故障排除没有任何误解。

一旦你做到了这一点,从你在这个问题线程上所说的一切来看,听起来你正在“安装”你的资源,但你的安装脚本永远不会运行。我的猜测是,您使用的版本号

//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


答案 2

当我遇到这个问题时,我不得不禁用缓存。无论出于何种原因,仅仅冲洗它都无济于事。


推荐