应该以什么顺序运行配置导入和模块更新?


10

由于模块的架构版本存储在键值存储中,因此它对于每个站点都是唯一的,并且不会通过配置管理进行同步。这是有道理的,因为更新可能需要进行未封装在配置中的调整(例如数据库更新),但是配置中可能还包含其他更改(例如,添加新的配置值)。

  • 以任何顺序运行配置导入和数据库更新是否存在任何风险?
  • 运行这些操作的首选顺序是什么?
  • 更新挂钩是否需要对可能已经导入的配置项进行特殊调整?
  • 完全更新生产环境是否需要其他操作?

相关问题:drupal.org/node/2901418
milkovsky

Answers:


12

必须在导入配置之前运行更新

针对核心的未决问题将确保允许导入配置之前,代码和架构版本匹配


更新之前配置导入的问题

  • 依赖于配置值的更新挂钩可能会获得与以预导入值运行时不同的结果。

  • 如果更新尝试创建已存在的配置实体,则可能会失败。

更新后有关配置导入的问题

  • 如果首先运行引入新配置实体的更新,它将创建一个新的配置项,该配置项的UUID与config中的UUID不同。但是,一旦导入了配置,则应将实体替换为配置版本。

    如果替换实体会影响关联的内容,则可能存在潜在的问题。例如,如果更新将内容从一个字段迁移到另一个字段,则在配置导入时,该字段将被完全替换,并且内容可能会丢失。在这种情况下,可能需要调整部署过程以在目标环境上运行更新并导出结果配置。


我以前留下的答案是顺序无关紧要(只是更新和配置的顺序应与实现的顺序相同)。我想我错了,因为您应该在更新后始终导出配置。因此,在本地,先更新然后导出,在部署时先更新然后导入。
ognockocaten

正如链接的问题所讨论的,在某些情况下,我们的实体更新需要导入新字段,否则post_update挂钩将失败。在这种情况下,我们需要在数据库更新之前完成配置导入。似乎最新鲜的方法是在这里:drupal.org/project/drupal/issues/2901418
atwixtor
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.