是否存储可编辑的网站内容?


9

我们有一个基于Django的网站,我们希望对其内部一些内容(文本和诸如定价计划之类的业务逻辑)进行轻松地编辑,因此我们决定将其存储在代码库之外。通常原因是以下之一:

  • 是非技术人员想要编辑的东西。一个示例是网站的文案写作-程序员使用默认值为“ Lorem ipsum ...”的文本准备一个模板,然后将实际内容插入到数据库中。

  • 我们希望能够快速进行更改,而无需部署新代码(我们目前每周执行两次)。一个示例是当前以不同定价级别向客户提供的功能。无需对它们进行硬编码,而是从数据库中读取它们。

所描述的解决方案是灵活的,但是出于某些原因我不喜欢它。

  • 因为必须从数据库读取内容,所以会产生性能开销

    我们通过使用缓存方案来减轻这种情况,但这也增加了系统的复杂性。

  • 与在生产环境上运行的方式相比,在本地运行代码的开发人员看到的系统处于截然不同的状态。自动化测试还会使系统处于不同的状态。诸如在登台服务器上测试新功能之类的情况也变得更加棘手-如果登台服务器没有数据库的最新副本,则它可能与生产意外地不同。

    我们可以通过偶尔将新状态提交到存储库(例如通过添加数据迁移)来缓解这种情况,但这似乎是错误的方法。是吗?

任何想法如何最好地解决这些问题?有没有更好的方法来处理我忽略的内容?


2
解决此类问题的最佳方法是避免“分析瘫痪”。您选择执行此操作的任何方式都将产生开销,不要在第二或第三次猜测时就增加更多。
Nocturno 2014年

我们在这里谈论多少州?几kbs,梅斯?
阿米特(Amit Wadhwa)2014年

Answers:


5

您应该将可编辑内容视为完整功能

  • 显然需要增加一些复杂性。也许您可以在编辑后存储静态资源以避免性能损失。
  • 内容就是数据,因此它是系统状态的一部分。开发人员必须处理它,以为用户可以执行UI允许他们执行的几乎所有操作。
  • 如果自动化测试依赖于数据库状态,则测试还必须在运行之前设置数据库状态(TestDataBuilders,fixtures ...),或将其设置为单元测试(可能是通过模拟)。

但是,除了使内容可编辑之外,您还可以使技术人员成为开发流程的一部分。除了开发->部署->更改数据外,您还可以更改数据->开发->部署。也许您可以从静态博客平台(例如Octopress)中借用一些想法。


0

对于您的DevOps而言,这是一项好任务。:)您可以执行以下操作:

  1. 将可编辑资源放在单独的工件/ VCS存储库中(我将在此处使用Git术语)。
  2. 实施构建和部署过程,以便将这些资源从该存储库中简单地提取到服务器上的单独位置(您可以为不同的环境建立某种约定,因此您无需为每个环境分别配置此位置)。
  3. 当用户更改网站上的某些内容时,更改仅保存到资源文件中。每次更改都会异步执行“推送到远程存储库”。
  4. 要部署任何更改,开发人员将禁用编辑功能,并将其更改合并到远程存储库中。然后,在生产中,他从远程仓库中提取合并的文件。之后,可以重新启用编辑功能。

除了与Chef或任何其他工具的合并外,其他所有操作都可以实现自动化,因此该解决方案对于用户,开发人员和SQA都可以使用。


0

任何想法如何最好地解决这些问题?

我们有同样的情况。我们最终使用了以下Django应用程序:

它不是完美的,但它可以为您提供所需的一切:

  • 非技术人员可以编辑,
  • 无需部署代码。
  • 如果您需要版本控制,则还原应用程序将为您提供该功能。

要使开发人员体验与生产系统相同的页面,如果有实际需要,请使用固定装置从生产导出到开发并进行测试。

有没有更好的方法来处理我忽略的内容?

从概念上讲,我认为您的做法正确。问问自己是否需要实施自己的解决方案,或者是否可以使用某种CMS。Flatpages是一种非常简单的版本。可以使用更复杂的CMS

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.