启动器重建应用程序上的损坏的git

在通过 UI 升级 docker_manager(看起来一切正常)后,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

啊!我的错。我指的是 UI,不是 API。我马上就编辑。

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'

但是当我退出容器 shell 并尝试使用 ./launcher rebuild app 重新构建时,我遇到了同样的错误。

./launcher rebuild app 是否使用了与 ./launcher enter app 进入的容器不同的容器?

1 个赞

是的,有两个级别的 git,一个在外面。

你的错误确实发生在容器内部……非常奇怪!

终于搞定了!
我认为这是因为 git 损坏和之前 Docker 升级的结果混合在一起了。我通过修剪所有 Docker 容器和镜像解决了它:

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

这导致/结束于:

升级完成
----------------
优化器统计信息不会通过 pg_upgrade 传输。
启动新服务器后,请考虑运行:
    /usr/lib/postgresql/15/bin/vacuumdb --all --analyze-in-stages

运行此脚本将删除旧集群的数据文件:
    ./delete_old_cluster.sh
-------------------------------------------------------------------------------------
POSTGRES 升级完成

旧的 13 数据库存储在 /shared/postgres_data_old

要完成升级,请使用以下命令重新构建:

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

通过再次运行重建,它开始完全正常工作:

./launcher rebuild app
1 个赞