答案 0 :(得分:5)
以下是我们的工作方式: 我们有2个服务器1个生产,第二个包含每个开发人员的开发环境和“暂存”环境。代码存储在Git中,我们始终保持主分支和实时分支。
简而言之:“实时”数据库使用drush导出并分发给开发人员。使用这两项功能以及hook_update()和hook_install()“保存”配置和设置。我们使用Feeds
解复后我们有一个非常简单的shell脚本,利用drush将实时数据库从实时服务器复制到开发服务器上的暂存,开发人员使用相同的简单shell脚本将登台数据库拉到他们自己的环境中。
数据库中发生的配置和开发通过Features和/或使用安装和更新挂钩导出。使用这三种方法,我们可以轻松部署大约99%的所有设置,内容类型和其他通常只存在于数据库中的构造。最后1%倾向于使用部署设置步骤更容易处理,而不是在hook_install和hook_update中编写查询。 100%部署是可能的,但有时它并不值得努力。
最后,有时需要从一个阶段到另一个阶段部署内容。这就是Feeds模块的用武之地。使用feed和一个简单的csv导入文件,我们已经成功创建并导出了大型分类集,甚至是复杂的节点和节点集。当您需要一组标准的“测试”数据来填充开发数据库时,使用Feed也很有用。
当部署新功能或设置时,我们将开发人员更改合并到主分支,在分段上进行部署和测试,这通常需要运行update.php,然后从新的“导入”更改或更新特征。如果所有内容都通过了测试和QA,则更改将合并到实时分支中并部署在生产环境中。
我们学到的最大教训是:
答案 1 :(得分:3)
查看碾压和碾压制作。 Drush非常适合同步,并确保查看备份迁移模块。另请参阅Features项目,该项目可帮助您在代码中捕获数据库模式(另请参阅hook_update)。
另外:Drupal将在几周后转向git。使用git。
Wheeeee!
答案 2 :(得分:1)
这可能是关于Drupal的薄雾问题之一 - 这是Drupal相当弱的一个领域。
您可能需要查看Aegir。这是一个基于Drupal的平台,旨在简化部署和更新。
它在幕后使用Drush,所以如果Aegir看起来像是满足你的需求,Drush可能就是你所需要的。 Drush是Drupal的命令行shell,它允许您使用命令提示符或批处理脚本在Drupal站点上执行操作。
在它们之间,这两个软件是Drupal推荐的管理部署的方式。
请注意,Drush(以及Aegir)的某些功能仅在Linux平台上运行时才有效,因此如果您的Drupal系统托管在Windows上,您可能会发现事情有点困难。
答案 3 :(得分:0)
一旦设置了多个环境(dev / stage / prod),就可以使用git,subversion来保持和同步多个环境中的代码。但在那之后,你将面临以下问题:如何推送 - 在环境之间拉取内容。我知道这是一个非常古老的问题,因为这也是一个非常古老的问题。我们在公司darwoft工作了一年这个问题。请看看我们的工具。 www.drumine.com。基本上,我们可以为多个环境中的对象分配相同的id。我们将在2015年12月10日,在http://camp.drupalchile.org/解释它是如何工作的。