2010-11-17 97 views
7

我們正在積極開發模塊,當我們將更改推送到生產現場時,通常需要進行多項配置更改。將自動化這個想法會很好嗎?Magento:如何將配置更改從開發遷移到生產環境?

+0

除非Magento在部署時有一些非常奇怪的要求,我會說這是[PHP站點部署建議](http://stackoverflow.com/questions/2628835/php-site-deployment-suggestion )。基本上,phing應該可以幫到你。 – Gordon 2010-11-17 18:58:26

回答

5

將更改作爲模塊「sql」目錄中的安裝或升級腳本的一部分進行。在您的模塊的「config.xml」文件中,增加每個匹配更改的版本號,並記住填寫<config><global><resources><MODULE_setup><setup>節點。

由於腳本在Magento的上下文中運行,您也可以訪問所有常規功能,所以更新不一定是SQL命令的形式。

+0

我同意你的評論,但會更進一步,即「更新**不應該以SQL命令的形式出現」。我還沒有遇到任何無法通過Magento的配置結構執行的DDL或DML語句。版本控制更容易。 – 2010-11-18 02:15:26

+0

後續問題是[這裏](http://stackoverflow.com/q/4315660/471559)。 – clockworkgeek 2010-11-30 15:57:09

8

不知道它是否仍然是實際的,但是如果您的意思是對系統 - >配置的更改,那麼使用此類config.xml節點而不是寫入數據庫升級要好得多。

Magneto將表表處理爲全局XML結構,因此您可以更改XML結構而無需使用數據庫表來更改系統配置。

這裏是小例子:

<config> 
    <stores> 
     <french> 
      <design> 
      <theme> 
       <default>french</default> 
      <theme> 
      </design> 
     </french> 
    </stores> 
    <websites> 
     <base> 
      <design> 
      <theme> 
       <default>english</default> 
      <theme> 
      </design> 
     </base> 
    </websites> 
</config> 

在這個例子中一個配置字段被用於在Magento兩個作用域改變。根據當前的網站和商店是現在的主題的定義。

因此<stores />節點包含特定商店的配置值。每個子元素都使用商店代碼進行命名,並且在嵌套視圖中包含配置數據。並且<website />節點包含特定網站的配置值。每個子元素都用網站代碼命名,並且在嵌套視圖中也包含配置數據。

此外,全球範圍內的配置值還有可用的<default />節點。但是如果特定的值是作用域的話,它將被<stores /><websites />覆蓋。

我只是通過config.xml對配置進行更改,因爲當您只需要通過Magento安裝程序進行安裝而無需在 「系統 - >配置」中進行更改時,部署項目就容易得多。

+0

據我所知,這種技術只能用於db table'core_config_data'上不存在或爲'NULL'的默認值。如果存在價值,我們需要編寫數據庫升級。我對嗎? – 2012-06-25 13:21:42

+0

@ v.kondratyuk,是的,你是對的。實際上,這種方法可讓您指定每個商店/網站/默認範圍的默認數據集,可由管理員用戶隨後更改。 如果您在團隊中的開發人員或qa部署之間交換代碼,那麼通過XML文件遷移配置總是好的。如果開發人員或其他用戶在數據庫中更改了值,則不應通過數據庫升級影響此更改,因爲它可能會用於調試團隊中其他開發人員的會話。 – 2012-12-08 18:46:07