2010-11-17 52 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