Architecture CMS暂存环境的体系结构

Architecture CMS暂存环境的体系结构,architecture,content-management-system,environment,production,staging,Architecture,Content Management System,Environment,Production,Staging,我的公司已经开发了一个cms,但现在我们使用它有一段时间了,我们偶然发现了一个问题:所有的变化都与生活环境直接相关。如果你想对一个站点做一次大的修改,你有时会想先完成所有的工作,然后立即将所有的修改发布到实时站点上 我现在谈论的是内容,而不是用于开发软件的开发/测试/登台/生产环境 我已经看到了几种解决问题的方法,但没有一种方法可以完全解决这个问题: 使用版本控制:版本x在生产中运行,y在暂存中运行 使用草稿/发布标志:所有草稿内容均远离现场 使用两个数据库:一个用于临时环境,一个用于实时环境

我的公司已经开发了一个cms,但现在我们使用它有一段时间了,我们偶然发现了一个问题:所有的变化都与生活环境直接相关。如果你想对一个站点做一次大的修改,你有时会想先完成所有的工作,然后立即将所有的修改发布到实时站点上

我现在谈论的是内容,而不是用于开发软件的开发/测试/登台/生产环境

我已经看到了几种解决问题的方法,但没有一种方法可以完全解决这个问题:

  • 使用版本控制:版本x在生产中运行,y在暂存中运行
  • 使用草稿/发布标志:所有草稿内容均远离现场
  • 使用两个数据库:一个用于临时环境,一个用于实时环境
  • 他们都有问题:

  • 对于新创建的页面(生产时版本为空?)和页面站点地图中的更改(我们使用嵌套集),版本控制是有问题的
  • 对于草稿,无法创建已发布页面的第二个版本
  • 使用第二个数据库,您必须复制/同步您不希望在这两个位置之间存在差异的所有数据:用户、用户组、权限等
  • 还有其他选择吗?您最好希望在用户杠杆上执行此操作,这样用户a就可以开始一次大检修,而用户B仍然能够发布新内容。但也许这对现在来说太难了,我们现在只需要解决第一个问题


    PS.这是一个php、ZF应用程序,具有MySQL后端,但我认为这对体系结构来说并不重要。

    实现这一点的方法是使用相对链接,或者根据站点配置文件中的值为链接添加前缀。

    还有另一种策略,即使用单独的存储库进行内容管理,内容从中发布到不同的内容交付环境。(因此只有3个数据库,而不是两个。)


    这是SDL Tridion使用的体系结构,根据我自己的经验,我知道它非常有效。我确信还有其他WCMS系统可以像这样工作,尽管唯一一个立即浮现在脑海中的是Bricolage。

    这已经有很长一段时间了,但我们现在有了一个多级CMS,其工作原理如下。生产和分期的树是双重的。在嵌套集设置中,我们可以在一个数据库中存储多棵树。生产中的页面通过UUID链接到登台

    内容本身通过版本控制进行管理,其中版本控制表保存所有版本,实体表保存生产版本。版本控制(用于暂存)因此比生产版本提前了一些步骤。通过这种方式,我们还可以实现文本blob的自动保存(这只是另一个版本)