一尘不染

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

php

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

有什么明显的我想念的地方是脚本无法运行的原因吗?


阅读 222

收藏
2020-05-26

共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与模块相关的所有条目。清除缓存。然后在安装程序类中找到以下位置

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并弄清楚为什么该类不包括您的安装程序文件。

2020-05-26