为较旧的 Discourse 安装(.discourse-compatibility)固定插件和主题版本

:open_book: 背景

有时,主题/插件需要进行一些仅与最新版 Discourse 兼容的更改。在这种情况下,可以指示旧版 Discourse 使用插件的旧版“固定”版本。

这可以通过在主题/插件存储库的根目录中使用 .discourse-compatibility 文件来实现。这是一个 YAML 文件,其中键指定 Discourse 核心版本,值表示你的主题/插件的关联版本。

Discourse 核心版本可以使用 <=< 运算符指定。出于历史原因,<= 是默认设置,但通常使用 < 更为合理。

:pushpin: 固定主题/插件版本

例如,如果 Discourse 核心在 3.2.0.beta2-dev(在 version.rb 中找到)期间进行了更改,而你的插件/主题开始依赖它,那么你将向 .discourse-compatibility 文件添加一个条目,如下所示:

< 3.2.0.beta2-dev: abcde

其中 abcde 是你的插件的“旧版”提交哈希的引用,应在旧版 Discourse 上使用。

现在,任何使用旧版 Discourse(例如 3.2.0.beta13.1.4)的用户将使用你的主题/插件的 abcde 版本。任何使用 3.2.0.beta2-dev 或更高版本用户将继续使用最新版本。

:clipboard: 多个条目

随着时间的推移,你可以向 .discourse-compatibility 文件添加多行。Discourse 将始终选择与当前 Discourse 核心版本匹配的“最低”规范。文件中的行顺序在技术上并不重要,但我们建议将最新的条目放在顶部。

:git_merged: 为旧版 Discourse 版本“回溯移植”更改

让我们来看一个 .discourse-compatibility 文件,其中有两个不同的版本规范固定到特定的插件提交:

< 3.2.0.beta1-dev: commithashfordiscourse31
< 3.1.0.beta1-dev: commithashfordiscourse30

如果你需要为 Discourse 3.1“回溯移植”更改,你可以这样做:

  1. 从旧提交创建分支(git checkout -b my_branch_name commithashfordiscourse31

  2. 提交你的更改并推送到 origin。如果你使用 GitHub 的分支保护功能,你可能希望保护此分支免遭意外删除。

  3. 在主分支上更新 .discourse-compatibility 文件,使其指向 3.1 支持分支上的新提交。

:globe_showing_europe_africa: 实际示例

这是一个来自 discourse-solved 插件的实际 .discourse-compatibility 文件。请注意,在撰写本文时,它仍在使用“旧版”语法,没有任何显式的 <<= 运算符。因此,每一行都被自动解释为 <=


本文档受版本控制 - 在 github 上建议更改。

17 个赞

如果版本是 \u003c 3.5.0.beta8-dev,它会包含 3.5.0 吗?

3.5.0 被认为“高于”预发布版本“3.5.0.beta8-dev”。

您始终可以在 Ruby 控制台中尝试比较:

> Gem::Version.new("3.5.0") < Gem::Version.new("3.5.0.beta8-dev")
=> false
5 个赞

明白了。感谢您的解释!

1 个赞