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

Magento:在核心安装完成之前运行升级脚本,magento,deployment,automation,installation,magento-1.7,Magento,Deployment,Automation,Installation,Magento 1.7,我正在致力于自动化Magento(1.7.0.2社区)商店的部署。为了做到这一点,我有一个包含完整代码库的Git存储库,包括所有已安装的模块 我在部署时针对空数据库运行基于命令行的安装程序(install.php)。但显然,模块的SQL更新脚本是在安装程序完全完成之前运行的,这导致了一个问题: 有一个(自定义)脚本可以创建一个新的(adminhtml)用户角色,这个角色似乎是在Magento自己的Administrators角色之前创建的。这并不坏,但是初始管理员用户是作为我们自定义角色的一部分

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

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

有一个(自定义)脚本可以创建一个新的(adminhtml)用户角色,这个角色似乎是在Magento自己的
Administrators
角色之前创建的。这并不坏,但是初始管理员用户是作为我们自定义角色的一部分创建的,而不是管理员!(我怀疑安装程序在创建用户时只是使用了类似于
parent\u 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();
可能有一种“Magento方式”来禁用数据库更新功能,但您可以通过以下方式在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);

您是否考虑过只导入根据新安装的Magento创建的数据库,然后触发执行升级的请求,而不是尝试在其他系统上触发安装?否。这不是将安装从a移动到B,而是执行新安装。将其视为自动化测试的一部分。从其他地方获取一个可能脏的数据库并将其用作起点既不安全也不可复制。当然,如果它“可能脏”,这将是不安全的,但源代码也是如此,我个人认为在repo中保留一个新的database.sql文件没有问题。导入并触发升级请求完全可以自动化。这就是我在本地机器上为测试模块等而设置的,然后我可以轻松地删除数据库并重设git repo,我很乐意重新开始。如果你不想那样做,那很酷。我注意到在过去,升级可以同时触发。这可能是您遇到的问题吗?首先通过
require\u once dirname(\uu文件\uu)运行数据库更新脚本可能会更容易/app/Mage.php'
Mage::app('admin')
Mage_Core_Model_Resource_Setup::applyAllUpdates()