从这个项目: 什么是最好的Drupal部署策略? .... 我引用:
数据库是棘手; 清理开发/分期DB,将其推到住的是最简单的的首次展示,但也有在做增量数据库更新时,如果Live网站上的用户也产生内容的几道皱纹。
我想就如何做到这一点的一些想法? 目前我得到的现有数据库的完整副本,我的本地机器上,提交了Subversion,然后部署整个数据库。 目前,该文件是15megs,每一次我必须上传整个文件(我认为颠覆认为这是一个全新的文件,因为它有这么多的变化,每次)。
所以,我的问题是真的:
- 我怎样才能得到我的数据库大小下来犯(小于经常犯除外)时?
- 是否有任何其他的方式来保持我的数据库和服务器数据库保持同步? 尤其是考虑到用户会发布新的数据所有的时间?
是否有任何其他的方式来保持我的数据库和服务器数据库保持同步? 尤其是考虑到用户会发布新的数据所有的时间?
我们有一个大型分布式团队和编辑人员无所不在,所以在部署数据库是不可行的。
为了解决这个问题,我们广泛使用的更新功能。 我们有没有真正的代码中,我们使用了更新设置的模块。 每当一个开发者,他们写这个模块,运行将就其他发展DB的相应变化,分期和生活时,在更新功能的配置变化。
有问题,特别是交叉依赖性(如果有人写多个模块更新功能),它可能需要一段时间来编写的东西是在管理一个相对小的变化。 安装配置文件API有助于此。
例如
function mysite_update_6000() {
install_include(array('user'));
$editor_rid = install_add_role('editor');
install_add_permissions(DRUPAL_ANONYMOUS_RID, array('do something'));
install_add_permissions($editor_rid, array('do something', 'administer nodes'));
return array();
}
将添加一个角色和分配一些权限给它。 这样做可避免所有的代码的变化,使你不必尝试迁移和同步数据库。
还有一个迁移可以帮助这一点,它记录更改表,并将它们保存到一个更新的功能模块。 这是不与drupal.org迁移模块,其为内容迁移相混淆。
我们已经取得了一些成功,但也与一些问题的功能模块,它可以与迁移功能可帮助。
对于较小的项目,我们还是做同样的事情,以你目前的过程中,我们锁定住实例仅通过阻断与编辑权限的所有用户阅读,比转储数据库,将其上传到一个阶段情况下,执行我们需要有所有更新和一旦对结果感到满意,我们切换阶段实例成为下一个现场版。 但即使是小的情况下,这是痛苦的,从一个很好的解决方案为止。
二更大的项目,我们都在同一条船上,杰里米在整个设置是这样复杂的部署完整的数据库转储,特别是因为我们没有能力锁定的情况下,以只读模式只是一些更新。
对于这些,我们已经使用了偏头痛在一定程度上(另见本相关讨论 )。 这不是一个Drupal模块,但我们适应了一下,我们需要一个Python脚本。 它的目的是创建有些结构性堆放,分开设置,和其他的东西用户提供内容,从而允许更多的选择性更新和升级策略。 但考虑到或多或少的混乱Drupal数据库结构(尤其是缺乏参照完整性强制执行),使用这种方法添加新的模块时,需要不断的调整,是非常危险的,因为人们需要作出额外的确认转储/只更新连贯套表。
我们尝试使用我们的自定义模块的更新功能,以尽量减少“批发”转储/更新操作的需要,我喜欢杰里米Frenchs添加一个“哑”模块只是添加更新功能的其他设置的能力的建议!
总而言之,更新/迁移Drupal的情况下,是一个很大的痛苦,现在,我希望会有在以后的版本更加一致的解决方案,但我可以看到,它是很难拿出一个通用的办法考虑到当前数据库架构和与个别添加那里自定义模块的量:/
PS: 备份和迁移是一个Drupal模块,似乎采取类似偏头痛脚本的做法,但我还没有使用它。
亨里克和Jeremy给上部署的状态出色的答案。 我还听说Capistrano的(红宝石)被使用,效果良好。 该DrupalCampLA 案例研究描述了他们使用(包括斯特拉努)的部署机制,并下载包,据说包括他们的部署脚本(一个或多个)。
如果你希望尽量减少你的数据库转储的大小,一定要对其进行定制,以排除高速缓存和看门狗表。 备份,默认情况下迁移的用户界面会显示它认为哪些表值得忽略。
要做到这一点,最好的办法是让你的代码和使用的工具,所有变化的功能模块来推动改变分期和/或生产。
这是更多的工作,同时开发,这是事实,但如果你有一堆人谁都有自己的数据库协同工作,或者你想轻松更改推到生产,特点是高清。 要走的路。