2013-03-26 115 views
0

我正在自动化部署Magento(1.7.0.2社区)商店。为了做到这一点,我有一个完整的代码库Git仓库,包括所有已安装的模块。Magento:升级脚本在核心安装完成之前运行

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

有一个(自定义)脚本会创建一个新的(adminhtml)用户角色,看起来这个角色是在Magento自己的Administrators角色之前创建的。这并不坏,但最初的管理员用户被创建为我们的自定义角色的一部分 - 而不是管理员! (我怀疑在创建用户时,与通常是管理员组1安装程序只需使用类似parent_id = 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封装。)

+0

您是否考虑过只导入一个由全新安装的Magento创建的数据库,然后触发执行升级的请求,而不是尝试触发其他系统上的安装? – 2013-03-26 13:04:50

+0

不是。这不是将安装从A移动到B,而是关于全新安装。把它看作是自动化测试的一部分。从其他地方获取可能脏的数据库并将其作为起点不是特别安全也不可重现。 – scy 2013-03-26 13:07:36

+0

当然,如果它“可能脏”,这将是不安全的,但是可以说源代码也是如此,我个人没有看到在你的仓库中保留一个新的database.sql文件的问题。导入并触发升级请求是完全自动化的。这就是我在本地机器上设置的测试模块等,我可以轻松地删除数据库硬重置git回购,我很好再次开始。如果你不想这样做,那很酷。我注意到过去可以同时触发升级。这可能是你遇到的问题吗? – 2013-03-26 13:17:50

回答

0

有可能是一个“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);