launcherのリビルドアプリでgitが破損

docker_manager を API を通じてアップグレードした後(問題なく完了したように見えましたが)、フォーラムの他の部分は機能しているようでしたが、Admin ダッシュボードは空のページを表示するだけになりました。

これを解決するために、以下のコマンドを実行しました。

./launcher rebuild app

しかし、そのプロセス中にエラーが発生しました。

I, [2025-07-14T08:54:06.062789 #1]  INFO -- : 
> cd /var/www/discourse && sudo -H -E -u discourse bash -c '
  set -o errexit
  if [ $(git rev-parse --is-shallow-repository) == "true" ]; then
      git remote set-branches --add origin main
      git remote set-branches origin tests-passed
      git fetch --depth 1 origin tests-passed
  else
      git fetch --tags --prune-tags --prune --force origin
  fi
'
error: packfile .git/objects/pack/pack-581fe47ace192793da04d01989a4d1a7f0e6103c.pack does not match index
error: packfile .git/objects/pack/pack-581fe47ace192793da04d01989a4d1a7f0e6103c.pack does not match index
error: packfile .git/objects/pack/pack-581fe47ace192793da04d01989a4d1a7f0e6103c.pack does not match index
error: packfile .git/objects/pack/pack-581fe47ace192793da04d01989a4d1a7f0e6103c.pack does not match index

…そして、error: packfile というエラーが中断されるまで延々と表示され続けます。

見たところ、git リポジトリが破損したようです。しかし、どの git リポジトリでしょうか?
私には /var/www/discourse というフォルダすらありません。これはコンテナのボリューム内にあるのでしょうか?

少し困っています。助けていただけると幸いです!

それはどういう意味ですか?

通常、UI経由でdocker_managerを更新します。

ああ!私の間違いです。APIではなくUIのことでした。すぐに編集します。

「いいね!」 1

コンテナを開始してアプリに入力することで解決しようとしました。

./launcher start app
./launcher enter app

次に、discourse ユーザーとして git コマンドを呼び出したときにエラーが発生することを確認しました。

cd /var/www/discourse
sudo -H -E -u discourse bash -c 'git fetch --tags --prune-tags --prune --force origin'

結果は以下のようになりました。

error: packfile .git/objects/pack/pack-581fe47ace192793da04d01989a4d1a7f0e6103c.pack does not match index
error: packfile .git/objects/pack/pack-581fe47ace192793da04d01989a4d1a7f0e6103c.pack does not match index
error: packfile .git/objects/pack/pack-581fe47ace192793da04d01989a4d1a7f0e6103c.pack does not match index
etc..

discourse をリネームして新しいものをクローンすることで解決しようとしました。

cd /var/www
mv discourse discourse-old
git clone https://github.com/discourse/discourse.git
chown -R discourse:discourse discourse

クローンした後、再度 git fetch を実行したところ、エラーは発生しませんでした!

cd /var/www/discourse
sudo -H -E -u discourse bash -c 'git fetch --tags --prune-tags --prune --force origin'

しかし、コンテナシェルを終了して ./launcher rebuild app で再度再構築しようとすると、同じエラーが発生しました。

./launcher rebuild app./launcher enter app が入るコンテナとは異なるコンテナを使用しますか?

「いいね!」 1

はい、Gitには2つのレベルがあります。1つは外部です。

あなたのエラーはコンテナ内で発生しているように見えます…非常に奇妙です!

ついに動作しました!
破損した git と以前の Docker アップグレードの結果の組み合わせだったと思います。すべての Docker コンテナとイメージを削除することで解決しました。

cd /opt/discourse
./launcher stop app
docker container prune
docker image prune -a
./launcher rebuild app

これにより、次の結果が得られました。

アップグレード完了
----------------
Optimizer statistics are not transferred by pg_upgrade.
Once you start the new server, consider running:
    /usr/lib/postgresql/15/bin/vacuumdb --all --analyze-in-stages

Running this script will delete the old cluster's data files:
    ./delete_old_cluster.sh
-------------------------------------------------------------------------------------
UPGRADE OF POSTGRES COMPLETE

Old 13 database is stored at /shared/postgres_data_old

To complete the upgrade, rebuild again using:

./launcher rebuild app
-------------------------------------------------------------------------------------

再度リビルドを実行したところ、完全に動作するようになりました。

./launcher rebuild app
「いいね!」 1