配置一个受支持的跟踪分支以获取 Discourse 软件更新

:bookmark: 本指南说明如何为您的 Discourse 实例配置受支持的跟踪分支,以管理软件更新。

:person_raising_hand: 所需用户级别:系统管理员

:warning: 需要控制台访问权限。

管理您的 Discourse 实例的跟踪分支决定了您接收更新的频率和类型。本指南解释了可用的不同跟踪分支,并提供了更改设置上分支的分步方法。

摘要

Discourse 提供多个用于跟踪软件更新的分支和标签:latestreleaseesr。本文档解释了每个分支的用途、它们的主要功能以及如何在您的 Discourse 实例中配置它们。有关发布模型的完整详细信息,请参阅 RFC: Discourse 的新版本控制策略

受支持的分支

latest

:information_source: 推荐默认值
此分支提供最新的错误修复和插件兼容性更新。main 分支中通过的每一个提交都会由构建服务器进行测试,并在成功验证后添加到 latest 分支。

  • 适用于希望保持最新状态的站点。
  • 站点可以随时手动更新。

release

:information_source: 适用于偏好每月发布的站点
release 标签跟踪 Discourse 最近一次的月度发布。每个月,都会从 latest 切出一个发布分支(例如 release/2026.2),从而提供一个稳定的快照。

  • 大约每月发布一次。
  • 每次发布会在两个完整的发布周期内接收关键修复。

esr

:information_source: 扩展支持发布 (Extended Support Release)
esr 标签跟踪最新的扩展支持发布版本,旨在优先考虑长期稳定性和安全性,而不是频繁更新的站点。

  • 大约每 6 个月从月度发布中确定一次。
  • 在扩展时间内接收安全修复和关键的向后移植。
  • 可能与社区插件和主题组件的兼容性有限。

:warning: 注意: 未接收定期的维护更新可能会导致某些功能过时或视觉不一致。

已弃用的别名

为了向后兼容,以下旧的分支/标签名称仍然有效,但被认为是已弃用的:

  • tests-passedlatest
  • betarelease
  • stableesr

其他分支或引用

:warning: 跟踪其他分支(例如特定的 release/YYYY.M 分支或提交 SHA)是可能的,但这需要专业知识。这些分支仅在有限时间内接收关键修复。

配置跟踪分支的说明

请按照以下步骤在您的 Discourse 实例中配置所需的​​分支:

  1. 访问配置文件
    通过在控制台中运行以下命令来打开 app.yml 配置文件:
cd /var/discourse
git pull
nano containers/app.yml

nano 编辑器将打开配置文件。
2. 编辑跟踪分支
通过在文件中搜索单词“version”来定位 version 参数:

params:  
## Which Git revision should this container use? (default: latest)  
#version: latest
  • 取消注释 version 行。
  • latest 替换为您所需的分支或标签名称(例如 esr)。示例:
params:  
## Which Git revision should this container use? (default: latest)  
version: esr  
  1. 保存并退出
  • Ctrl+O 保存更改。
  • Enter 确认。
  • 使用 Ctrl+X 退出编辑器。
  1. 重建容器
    更改并保存后,重建容器以应用新配置:
git pull
./launcher rebuild app

:warning: 此过程可能会导致临时停机。如果可能,请确保在非工作时间更新实例。

26 个赞

这里似乎有些不对劲。我之前运行的是 v3.5.0 beta3,yml 配置为 version: tests-passed

随后我注意到这个版本控制变更,因此在重新构建之前,我将 yml 改为 version: esr,然后通过 CLI 执行了重新构建。

现在在 Discourse 中我看到:

已安装
2026.3.0-latest.1

这似乎使用的是 tests-passed 标签,而不是 esr 标签。我已确认 app.yml 中的版本显示为 esr,那么它为何仍在获取最新的构建版本?

version: esr  

这个配置无法拉取代码,因为version目前只支持分支,不支持标签。这个我已经验证过了。

错误如下:

FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && sudo -H -E -u discourse bash -c '
  set -o errexit
  git fetch --tags --prune-tags --prune --force origin
  if [[ $(git symbolic-ref --short HEAD) == v3.6.0.beta2 ]] ; then
      git pull
  else
      git -c advice.detachedHead=false checkout v3.6.0.beta2
  fi
' failed with return #<Process::Status: pid 146 exit 128>
Location of failure: /usr/local/lib/ruby/gems/3.4.0/gems/pups-1.4.0/lib/pups/exec_command.rb:138:in 'Pups::ExecCommand#spawn'
exec failed with the params {"cd" => "$home", "hook" => "code", "cmd" => ["sudo -H -E -u discourse git clean -f", "sudo -H -E -u discourse bash -c '\n  set -o errexit\n  git fetch --tags --prune-tags --prune --force origin\n  if [[ $(git symbolic-ref --short HEAD) == $version ]] ; then\n      git pull\n  else\n      git -c advice.detachedHead=false checkout $version\n  fi\n'", "sudo -H -E -u discourse git config user.discourse-version $version", "mkdir -p tmp", "chown discourse:www-data tmp", "mkdir -p tmp/pids", "mkdir -p tmp/sockets", "touch tmp/.gitkeep", "mkdir -p                    /shared/log/rails", "bash -c \"touch -a           /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log\"", "bash -c \"ln    -s           /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log $home/log\"", "bash -c \"mkdir -p           /shared/{uploads,backups}\"", "bash -c \"ln    -s           /shared/{uploads,backups} $home/public\"", "bash -c \"mkdir -p           /shared/tmp/{backups,restores}\"", "bash -c \"ln    -s           /shared/tmp/{backups,restores} $home/tmp\"", "chown -R discourse:www-data /shared/log/rails /shared/uploads /shared/backups /shared/tmp", "[ ! -d public/plugins ] || find public/plugins/ -maxdepth 1 -xtype l -delete"]}
bootstrap failed with exit code 128
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.
adc8ef45e9ae880827c9294dbbf73dfe9ab413a050c83fe3f4722c2911876ce2


version只支持分支,不支持标签!

正确的应该是

params:
  version: release/2025.11

根本原因是git symbolic-ref --short HEAD命令只能返回分支名称。如果需要支持标签或者hash需要改成下面的命令

git describe --exact-match --tags 2>/dev/null || git rev-parse --short HEAD

1 个赞