本指南说明如何为您的 Discourse 实例配置受支持的跟踪分支,以管理软件更新。
所需用户级别:系统管理员
需要控制台访问权限。
管理您的 Discourse 实例的跟踪分支决定了您接收更新的频率和类型。本指南解释了可用的不同跟踪分支,并提供了更改设置上分支的分步方法。
摘要
Discourse 提供多个用于跟踪软件更新的分支和标签:latest、release 和 esr。本文档解释了每个分支的用途、它们的主要功能以及如何在您的 Discourse 实例中配置它们。有关发布模型的完整详细信息,请参阅 RFC: Discourse 的新版本控制策略。
受支持的分支
latest
推荐默认值
此分支提供最新的错误修复和插件兼容性更新。main 分支中通过的每一个提交都会由构建服务器进行测试,并在成功验证后添加到 latest 分支。
- 适用于希望保持最新状态的站点。
- 站点可以随时手动更新。
release
适用于偏好每月发布的站点
release 标签跟踪 Discourse 最近一次的月度发布。每个月,都会从 latest 切出一个发布分支(例如 release/2026.2),从而提供一个稳定的快照。
- 大约每月发布一次。
- 每次发布会在两个完整的发布周期内接收关键修复。
esr
扩展支持发布 (Extended Support Release)
esr 标签跟踪最新的扩展支持发布版本,旨在优先考虑长期稳定性和安全性,而不是频繁更新的站点。
- 大约每 6 个月从月度发布中确定一次。
- 在扩展时间内接收安全修复和关键的向后移植。
- 可能与社区插件和主题组件的兼容性有限。
注意: 未接收定期的维护更新可能会导致某些功能过时或视觉不一致。
已弃用的别名
为了向后兼容,以下旧的分支/标签名称仍然有效,但被认为是已弃用的:
tests-passed → latest
beta → release
stable → esr
其他分支或引用
跟踪其他分支(例如特定的 release/YYYY.M 分支或提交 SHA)是可能的,但这需要专业知识。这些分支仅在有限时间内接收关键修复。
配置跟踪分支的说明
请按照以下步骤在您的 Discourse 实例中配置所需的分支:
- 访问配置文件
通过在控制台中运行以下命令来打开 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
- 保存并退出
- 按
Ctrl+O 保存更改。
- 按
Enter 确认。
- 使用
Ctrl+X 退出编辑器。
- 重建容器
更改并保存后,重建容器以应用新配置:
git pull
./launcher rebuild app
此过程可能会导致临时停机。如果可能,请确保在非工作时间更新实例。
26 个赞
RBoy
(RBoy)
34
这里似乎有些不对劲。我之前运行的是 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 个赞