Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Svn Drupal数据库部署策略?_Svn_Drupal - Fatal编程技术网

Svn Drupal数据库部署策略?

Svn Drupal数据库部署策略?,svn,drupal,Svn,Drupal,从这个项目:。。。。我引述: 数据库更复杂;清理dev/staging数据库并将其推到活动状态对于初始推出来说是最容易的,但是如果活动站点上的用户也在生成内容,则在执行增量数据库更新时会出现一些问题 我想知道怎么做?目前,我在本地计算机上获得了现有数据库的完整副本,提交该颠覆,然后部署整个数据库。目前这个文件是15megs,每次我都要上传整个文件(我想subversion会把它看作一个全新的文件,因为它每次都有很多变化) 所以,我的问题是: 提交时如何降低数据库大小(而不是降低提交频率) 有没有

从这个项目:。。。。我引述:

数据库更复杂;清理dev/staging数据库并将其推到活动状态对于初始推出来说是最容易的,但是如果活动站点上的用户也在生成内容,则在执行增量数据库更新时会出现一些问题

我想知道怎么做?目前,我在本地计算机上获得了现有数据库的完整副本,提交该颠覆,然后部署整个数据库。目前这个文件是15megs,每次我都要上传整个文件(我想subversion会把它看作一个全新的文件,因为它每次都有很多变化)

所以,我的问题是:

  • 提交时如何降低数据库大小(而不是降低提交频率)
  • 有没有其他方法保持我的数据库和服务器数据库同步?特别是考虑到用户将一直发布新数据
  • 有没有其他方法保持我的数据库和服务器数据库同步?特别是考虑到用户将一直发布新数据

    我们有一个庞大的分布式团队,编辑人员遍布各地,因此部署数据库是不可行的

    为了解决这个问题,我们广泛使用了更新函数。我们有一个没有真实代码的模块,我们用它来更新设置。每次开发人员进行配置更改时,他们都会在该模块中编写一个更新函数,该函数在运行时将在其他开发数据库(staging和live)上进行相应的更改

    存在一些问题,特别是交叉依赖性(如果人们在多个模块中编写更新函数),并且可能需要一些时间来编写一些在管理方面相对较小的更改。在这方面有帮助

    比如说

    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迁移模块混淆,后者用于内容迁移


    我们取得了一些成功,但模块也存在一些问题,这有助于迁移功能。

    对于较小的项目,我们仍然会执行与您当前的过程类似的操作,即通过阻止所有具有编辑权限的用户,将live实例锁定为只读,而不是转储数据库,将其上载到stage实例,在那里执行我们需要的所有更新,一旦对结果感到满意,我们就将stage实例切换为下一个实时版本。但即使是很小的例子,这也是痛苦的,远不是一个好的解决办法

    在两个更大的项目中,我们与Jeremy处于同一条船上,因为部署完整的数据库转储的整个设置非常复杂,特别是因为我们无法仅为一些更新将实例锁定为只读模式

    对于这些,我们在一定程度上使用了(另请参见)。它不是一个Drupal模块,而是一个python脚本,我们根据自己的需要对其进行了一些调整。它的目标是创建一些结构化的转储,将用户提供的内容与设置和其他内容分离,从而允许更具选择性的更新和登台策略。但是由于Drupal数据库结构或多或少比较混乱(特别是缺乏引用完整性实施),因此在添加新模块时使用这种方法需要不断调整,而且风险很大,因为需要额外确保只转储/更新一致的表集

    我们通过使用自定义模块的更新功能尽量减少对“批发”转储/更新操作的需求,我喜欢Jeremy Frenchs的建议,即添加一个“虚拟”模块只是为了能够为其他设置添加更新功能

    总而言之,更新/迁移Drupal实例目前是一个巨大的难题,我希望在未来的版本中会有一个更一致的解决方案,尽管我可以看到,鉴于当前的数据库模式和自定义模块的数量,很难提出一个通用的方法,其中包括:/



    PS:是一个Drupal模块,似乎采用了类似于偏头痛脚本的方法,但我还没有使用它。

    Henrik和Jeremy对部署状态给出了极好的回答。我还听说Capistrano(ruby)的使用效果很好。DrupalCampLA描述了他们使用的部署机制(包括Capistrano),下载包据说包含了他们的部署脚本


    如果要最小化数据库转储的大小,请确保对其进行调整以排除缓存和监视表。默认情况下,备份和迁移的UI会显示它认为值得忽略的表。

    最好的方法是保留代码中的所有更改,并使用工具将更改推送到暂存和/或生产中


    事实上,在开发过程中需要做更多的工作,但是如果你和一群拥有自己数据库的人一起工作,或者你想轻松地将更改推送到生产环境中,那么特性就是def。方法。

    +1-使用“虚拟”模块来实现自定义更新功能是个好主意。@Jeremy:我发现你的方法非常令人费解,因为功能模块并不是万能的。但是我想知道如何为作为Druapl管理员所做的所有事情编写udpate代码。例如,我启用所有与翻译/语言环境相关的模块,然后在所有菜单中创建菜单项的翻译版本。你想从哪里知道该在更新函数中为此编写什么代码?+1建议另一种替代方案-我以前没有听说过Capistrano,但它看起来/听起来很有希望检查它。