2013-03-26 121 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);