Discourse の旧バージョンのデプロイに関するヘルプ

ここにエラーがあるはずです。タグv3.6.0.beta2でプルしようとしたところ、次のエラーが発生しました。

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

です。私がrelease/2025.11をプルしようとしたのは、現在の本番環境がこの近いバージョンであり、アップグレードしたいが問題が発生するのを恐れているためです。また、審査プロセスにより、直接アップグレードを実行することは許可されておらず、テスト環境でアップグレードプロセス(release/2025.11=>release/2026.1)に問題がないことを確認してから本番環境で操作する必要があります。これは少し冗長ですが、プロセスとして正しいことを行うための最良の選択です。そのため、ここで特定のブランチまたはタグをプルする方法を探す必要がありました。

長々と失礼しました。幸いなことに、何とかまともな解決策を見つけることができました。皆さん、ありがとうございます。

この修正による他の影響について、更新を続けます。

特定のブランチのインストールは実現しましたが、このブランチからアップグレードを検証しようとすると失敗しました。更新ページでは最新の更新が検出されないため、ページ上で更新操作を行うことができません。

以前のトピックの続きですが、新しい問題が発見されました。ローカルコードベースが古い場合、フロントエンドのコンパイル失敗やその他のエラーが発生します。したがって、すべての変更を開始する前に、ローカルコードベースを最新バージョンに更新する必要があります。

# ローカルコードベースを変更した場合は、まず一時保存してください
# git stash

# 最新に更新
git pull

# 一時保存したコードを再適用するか、対応する設定ファイルを再編集してください
# git stash pop

ローカルリポジトリを最新版に更新した後でなければ、以前のステップに従って指定されたブランチのビルドを正常に完了させることはできません。

ここでいうローカルコードベースとは:https://github.com/discourse/discourse_docker.git
つまり、標準インストール後のコードベースです。

最後にまとめます。

私たちの要件は:指定バージョンのインストールです。

  1. ローカルコードリポジトリ https://github.com/discourse/discourse_docker.git を更新する
# プロジェクトのルートディレクトリに移動
cd /var/discourse
# 最新バージョンに更新
git pull
  1. 指定するバージョンを変更する

containers/app.yml を編集し、最後に以下の設定を追加します:

params:
  version: release/2026.1 # ベストプラクティスとしては esr を指定すべき
  1. 再構築する
./launcher rebuild app

もし version: esr を指定している場合は、以降の内容は読む必要はありません。

まず git pull を実行して、ローカルコードリポジトリが最新であることを確認します。次にデプロイするブランチを指定し、最後に再構築を行います。この手順は、release/2026.1 から release/2026.7 へアップグレードしたい場合に適用されます。

もし既にインストール済みの release/2026.1 をアップグレードしたいだけなら、管理画面から直接「アップグレード」をクリックするだけで構いません。これは release/2026.1 に更新(特に脆弱性修正)がある場合に適用されます。

特定のバージョンを構成するのではなく、latest や stable のようなフレーバー、ストリーム、タグを構成するのは非常に異例だと思います。実際、このシステムで通常利用可能で有用なタグが何であるか、もはや確信が持てません。

Configure a supported tracking branch to get Discourse software updates をご覧になりましたか?どのタグが有用かを理解するのに役立つかもしれません。

はい、通常の利用者であればデフォルトのlatestで十分です。しかし、私のようなケースでは、特定のバージョンの使い方を調べる必要があります。bossに対して「残念ながら、Discourse は現時点では特定のバージョンのチェックアウトをサポートしていないため、最新版にしか更新できません」と言うわけにはいきません。

この投稿は非常に役立ちますので、じっくりと拝見させていただきます。ありがとうございます。

それを見たことがありませんでした。ありがとうございます。latest/release/esr を使用するべきのようです。私の古い app.yml はコメントアウトされているため、デフォルトが適用されていることがわかります:

  ## このコンテナはどの Git リビジョンを使用すべきですか?(デフォルト: tests-passed)
  #version: tests-passed

version は現在タグをサポートしていません。サポートするには、ビルドスクリプトを変更する必要があります。本来のベストプラクティスは以下の通りです。

params:
  version: esr

しかし現在、以下のように変更せざるを得ません。

params:
  version: release/2026.1

興味深いことですが、新しいバージョン管理戦略が導入される以前から、beta は長い間、ブランチではなくタグとして使用されていました: Upcoming changes to the beta branch of Discourse

私です。私も混乱していますが、現在のビルドコードではタグを使用できません。本来であればそのようなはずではありません。

version: release/2026.1 は問題なく動作するはずです。バージョンの新しい重複サポート期間を活用したい場合は、これが正しい方法です(もちろん、2026.1 がサポート終了に達する前に手動で更新することを忘れないでください)。

version: esr も動作します。このシステムはタグをサポートするように設計されています。実装は git checkout $version として行われています。

この変更は web.template.yml で行ってはいけません。サイト固有の containers/app.yml で行う必要があります。

何かおかしいようです。version: tests-passed に設定された yml で v3.5.0 beta3 を実行していました。

その後、このバージョン管理の変更注意到了ので、再ビルドする前に yml を version: esr に変更し、CLI から再ビルドを行いました。

Discourse には現在、

インストール済み
2026.3.0-latest.1

と表示されています。これは esr タグではなく tests-passed タグを使用しているように見えます。app.yml のバージョンは esr として表示されていることを確認しましたが、なぜ最新のビルドを取得しているのでしょうか?

つまり、最新の安定版/ESRビルドを取得する方法はもうないのでしょうか?

app.yml ファイルの関連する行を共有していただけますか?version: は確実に params: セクションの下にインデントされていますか?また、行の先頭から YAML コメント文字の # を確実に削除しましたか?

念のためですが、ESR 版に戻りたい場合は、以前のバックアップを復元するか、7 月の次の ESR リリースを待つ必要があります。Discourse インストールのダウングレードはサポートされていません :cry:

はい、ダウングレードできないことは承知しています。インデントを示すスクリーンショットを添付します。

何か問題に気づきますか?

versionparams の一部であるため、インデントすべきだと考えます。

はい、最初はcontainers/app.ymlで直接設定していたのですが、なぜか反映されず、やむを得ずtemplates/web.template.ymlを直接修正しました。再びcontainers/app.ymlで修正を試みます。

さらに、version: esrという設定が機能しない理由をご確認いただけますでしょうか?これは私の環境だけの問題でしょうか、それとも皆さんも同様の状況でしょうか。私のネットワーク環境は確かに不安定です。

設定は以下の通りです。

params:
  version: v3.6.0.beta2

エラーメッセージは以下の通りです。

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

根本的な原因は、git symbolic-ref --short HEAD コマンドがブランチ名のみを返せる点にあります。