Magento:在核心安装完成之前运行升级脚本

时间:2013-03-26 13:00:07

标签: magento deployment automation installation magento-1.7

我正致力于自动部署Magento(1.7.0.2社区)商店。为了做到这一点,我有一个包含完整代码库的Git存储库,包括所有已安装的模块。

我在部署时针对空数据库运行基于命令行的安装程序(install.php)。但显然模块的SQL更新脚本在安装程序完全完成之前运行,这会导致出现问题:

有一个(自定义)脚本可以创建一个新的(adminhtml)用户角色,似乎这个角色是在Magento自己的Administrators角色之前创建的。这也不错,但最初的管理员用户是作为我们的自定义角色的一部分创建的 - 而不是管理员! (我怀疑安装程序在创建用户时只使用parent_id = 1之类的内容,1通常是管理员组,但在这种情况下,它是我们的自定义组。)

所以,我的问题是:如何在安装程序运行时保持升级脚本不被执行(并让它在第一页加载时运行),或告诉安装程序仅运行此升级脚本 初始用户和角色设置完成后?或者你看到一个完全不同的解决方案?

如果有用:这是我们的升级脚本基本上做的:

<?php
$roleData = array(
        'role_name'   => 'My_Shiny_Role',
        'role_type'   => 'G',
);
$role = Mage::getModel('admin/role')->setData($roleData)->save();

$resources[0] = '__root__';
Mage::getModel("admin/rules")
    ->setRoleId($role->getId())
    ->setResources($resources)
    ->saveRel();

(它没有封装在类中,只是简单的PHP。)

1 个答案:

答案 0 :(得分:0)

可能有一个“Magento Way”来禁止执行数据库更新功能,但你可以通过以下方式在SQL中执行:

UPDATE
core_resource
SET 
version = CONCAT('9.', version),
data_version = CONCAT('9.', data_version);

然后重新启用它:

UPDATE
core_resource
SET 
version = SUBSTR(version, 3),
data_version = SUBSTR(data_version, 3);