为旧版 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 个赞