Обновления через UI отключены и не включаются после обновления по SSH

Когда я пытаюсь обновить через интерфейс, появляется вот такое сообщение:

После нескольких команд git pull и пересборки я всё ещё получаю то же сообщение. Есть какие-то советы?

Интересно, не нужно ли мне сделать вот это:

Речь идёт о старом, давно работающем форуме.

Cc @pacharanero

Это была стандартная установка? Возможно, вы запускали обновление на неправильном сервере? Сбой перестройки и вы перезапустили старый контейнер? У меня нет других предположений.

Вам следует обновлять вашу ОС в соответствии с рекомендациями в теме, на которую вы ссылаетесь, но это не связано с описанной вами проблемой.

Меня иногда смущает, что обновление GUI не сбрасывается и нас снова просят подключиться по SSH, даже если это только что было сделано буквально.

Это была стандартная установка, но первоначальная установка была сделана ещё в 2014 году, в самые ранние дни, когда Discourse только что вышел из публичного бета-тестирования.

user@server:/var/discourse$ docker -v
Docker version 19.03.13, build 4484c46d9d

Существует более новая версия Docker, но для Ubuntu характерно, что версия в репозитории немного отстает от последней.

ОС полностью и регулярно обновляется.

Хм. После обновления есть задержка, прежде чем Discourse проверит, был ли пересоздан контейнер, хотя я никогда не сталкивался с тем, чтобы это влияло на docker-manager.

Вы можете попробовать следующее:

docker exec app bash -c 'rails runner AdminDashboardGeneralData.refresh_stats

Но прошло уже достаточно времени, поэтому я не думаю, что это ваша проблема. Хотя попробовать не помешает.

Я не помню минимальную поддерживаемую версию Docker, но тоже не думаю, что это проблема, по крайней мере, если вы не используете Ubuntu 16.04.

Может ли это быть связано с веткой, на которой мы работаем?

В containers/app.yml мы явно указываем tests-passed.

Но, конечно, это то, что выполняется ВНУТРИ контейнера. Имеет ли значение, какая ветка является основной снаружи контейнера?

user@server:/var/discourse# git status
На ветке master
Ваша ветка синхронизирована с 'origin/master'.

Раньше по умолчанию в GitHub использовалась ветка master. Сейчас это main.

Верно. Попробуйте, наверное, так:

cd /var/discourse
git checkout main

Но я не думал, что это нужно делать явно.

А как насчёт этого:

cd /var/discourse
./launcher enter app
cd /var/www/discourse
git status

Это, конечно, относится к discourse_docker:

:/var/discourse# git remote -v
origin  https://github.com/discourse/discourse_docker.git (fetch)
origin  https://github.com/discourse/discourse_docker.git (push)

Ветка была переключена в августе 2021 года и на момент написания отстает от main на 49 коммитов:
GitHub - discourse/discourse_docker at master · GitHub

Так что вы, безусловно, хотите переключиться на ветку main?

Однако я согласен с @pfaffman: я никогда не делал этого явно, значит, должен был существовать какой-то скрипт, который это сделал. Возможно, это произойдет при следующей пересборке?

возвращает:

user@inside-container-app:/var/www/discourse# git status
Обновление индекса: 100% (30949/30949), завершено.
На ветке tests-passed
Ваша ветка актуальна с 'origin/tests-passed'.

Похоже, у вас всё обновлено. И вы всё ещё видите страницу «Обновления отключены»?

Да. Я посмотрел на другой Discourse, который я администрирую, — он уже довольно старый, тоже находится на ветке master и также показывает страницу «Обновления отключены».

Тем не менее, ещё один Discourse, который я настроил в середине 2022 года, тоже находится на ветке master, но показывает экран обновления как обычно!

Если мы получим подтверждение, что смена ветки discourse_docker на main решит проблему, я готов попробовать это сделать. Возможно, на сайте, которым пользуюсь только я.

Это примерно совпадает с тем временем, когда у меня начали возникать странные проблемы с некоторыми установками Discourse во время обновлений. (Из-за этого я в итоге просто обновлял их все через SSH каждый раз, используя Ansible).

Я тоже почти всегда делаю так же, хотя всё чаще запускаю скрипт обновления Ansible через https://www.pfaffmanager.com/.

Ладно, я перешёл на ветку main в Discourse, который использую только как личный блокнот и журнал и т.д.

До переключения я использовал ветку master, и страница административного обновления действительно была отключена.

После переключения на ветку main и пересборки могу подтвердить, что интерфейс административного обновления снова работает нормально.

Хм. Интересно, значит ли это, что все старые установки должны сменить ветку? @Falco, может, тебе стоит посмотреть на это.

Запускающая программа автоматически переключает ветку с master на main. Похоже, что автоматический переход был заблокирован, например, из-за ожидающих изменений в stash.

Насколько вероятно это на таком количестве экземпляров?

И что вообще такое изменения в stash?

О каком количестве идет речь? В мире тысячи установок Discourse, и я не вижу десятков сообщений об этой проблеме. По крайней мере, пока нет :sweat_smile:

Если у кого-то есть сервер, на котором эта ошибка воспроизводится в данный момент и может воспроизводиться еще в течение дня, пожалуйста, ответьте здесь, чтобы мы могли провести дальнейшее расследование.

Хм. Это может быть связано с этим на нашем экземпляре @nathank.
У меня в той же директории, что и репозиторий Git для Discourse, лежат несколько рабочих файлов (не имеющих отношения к кодовой базе Discourse). Если ./launcher попытается переключить ветку, Git выдаст ошибку, и мне придётся сохранить эти изменения в стэше (или закоммитить их).

Спасибо @Falco, я проведу дополнительное расследование. Возможно, затронуты только те экземпляры Discourse, в которых Git по какой-либо причине выдаёт ошибку при попытке переключения ветки.

Обновление: Я думаю, что проблема с некоторыми неотслеживаемыми файлами *могла быть причиной. Я удалил эти файлы и убедился, что команда git checkout main выполнена успешно. Затем я запустил ./launcher rebuild app, и, похоже, всё сработало.

Насколько я могу судить, согласно тому, что написал выше @Falco, я не думаю, что *на самом деле необходимо отслеживать main в репозитории Discourse. При запуске ./launcher rebuild app сам скрипт переключится на правильную ветку.

У меня было несколько более старых инсталляций Discourse, на которых всё ещё отображалась страница «Обновления отключены», несмотря на то, что я убедился в успешном выполнении команд:

git checkout main
git pull
git checkout master

Для этих случаев я просто оставил эти экземпляры отслеживать ветку main, выполнил ./launcher rebuild app, и всё заработало.