4

我创建了一个模块,导出了扩展名和后记,我使用直接包文件上传安装了它(在新商店中)。扩展按预期工作。

现在,我进行了一些更新,使用另一个发布版本号导出了扩展名,但是当我尝试上传存档(以相同模式)时,我收到一个错误(“连接错误:包文件无效 [..] ”。 /app/code/local/Smart2Pay/Globalpay/Block/Form/Pay.php'已经存在" )

我读到我可以更改一些 downloader\lib\Mage\Connect\Validator.php 文件(此处)以允许文件覆盖,但我想知道是否有任何其他与最佳实践相关的解决方案。我需要此扩展更新才能为所有 magento 用户工作。

4

1 回答 1

4

正如 Tim 所说,安装新版 Magento 扩展包的正确方法是首先在 MagentoConnect Manager 中运行卸载选项以删除旧扩展,然后运行安装选项以从较新的包文件中安装。

不幸的是,这是 MagentoConnect 包管理器功能的(糟糕的)设计。

它还值得解释扩展/包所做的任何数据库修改会发生什么。Magento 模块无法指定卸载脚本或指令。这意味着在卸载原始模块/包后,任何数据库更改仍然存在并且没有被删除。当重新安装较新版本的模块时,这应该会触发模块的数据库升级脚本而不是它的安装脚本来运行。

因此,发生的事情的详细分类如下:

  1. 当模块最初是从包中安装时,会运行与 config.xml 中模块版本相对应的模块的最新安装脚本,并进行任何必要的数据库更改。

  2. 当模块从 MagentoConnect 管理器中卸载时,数据库保持原样,因此模块所做的所有更改仍然存在于数据库中。

  3. 当安装了较新版本的模块时,Magento 数据库 core_resource 表会告诉安装程序之前安装了哪个版本的模块。旧版本号和新版本号用于在模块代码中查找适用的数据库升级脚本。如果找到适当的升级脚本,则运行它。

于 2013-05-14T22:15:10.167 回答