Обновление не удалось: FAILED TO BOOTSTRAP

При попытке обновить наш экземпляр Discourse сегодня потребовалось выполнить git pull, но команда ./launcher rebuild завершается ошибкой FAILED TO BOOTSTRAP, и я пока не могу определить, откуда исходит сбой.

Мы используем Discourse на Ubuntu 18.04. До сегодняшнего обновления всё работало без проблем.

Наш файл app.yml называется web.yml, поэтому я выполнил:

# git pull
# ./launcher rebuild web

В конце вывода видно следующее:

I, [2022-02-18T19:25:46.155360 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate'
Discourse requires Redis 6.2.0 or up
I, [2022-02-18T19:25:55.644442 #1]  INFO -- : gem install sawyer -v 0.8.2 -i /var/www/discourse/plugins/discourse-github/gems/2.7.5 --no-document --ignore-dependencies --no-user-install
Successfully installed sawyer-0.8.2
1 gem installed
gem install octokit -v 4.21.0 -i /var/www/discourse/plugins/discourse-github/gems/2.7.5 --no-document --ignore-dependencies --no-user-install
Successfully installed octokit-4.21.0
1 gem installed
 
 
 
FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate' failed with return #<Process::Status: pid 1121 exit 1>
Location of failure: /usr/local/lib/ruby/gems/2.7.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'
exec failed with the params {"cd"=>"$home", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}
85459e34ac2c6275dd1700de2c469124a9fded84800b8c6b4686c1c6b66824e2
** 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.

Полный вывод здесь

Вот список наших текущих плагинов:

discourse/docker_manager.git
discourse/discourse-github.git
discourse/discourse-solved.git
discourse/discourse-data-explorer.git
discourse/discourse-akismet.git
discourse/discourse-spoiler-alert.git
cpradio/discourse-plugin-replygif.git
discourse/discourse-push-notifications.git
discourse/discourse-chat-integration

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

Я попытался откатиться к предыдущему коммиту, чтобы проверить, смогу ли я успешно пересобрать наш веб-контейнер без последних изменений, но он всё равно завершается ошибкой при загрузке (bootstrap). :confused:

Обновление:

Мы использовали отдельную настройку контейнеров, что, как оказалось, не является хорошей идеей, и наш контейнер с данными был очень старым: он работал на Redis v5.0.5 (сейчас Discourse требует версию 6.2.0 и выше). Поэтому мы пересобрали контейнер с данными, а затем успешно пересобрали веб-контейнеры. После этого опыта, вероятно, мы откажемся от подхода с несколькими контейнерами в будущем.

Большое спасибо @pfaffman за невероятно полезные ссылки!

Какой Redis вы используете?

См. также Skip Redis Version Check

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

Внутри нашего дата-контейнера:

# redis-server --version
Redis server v=5.0.5

Так, теперь всё ясно. Похоже, нам нужно также обновить наш дата-контейнер. Это меня немного беспокоит. Когда было введено это требование? Возможно, я мог бы откатиться к предыдущей версии веб-контейнера, пока мои подкрепления (в Австралии) не проснутся и не будут доступны. :wink:

Ух ты. Просматривая историю коммитов git, вижу, что версия Redis уже два года не находится в диапазоне 5.x! Но я знаю, что мы успешно выполняли обновления по ходу дела (включая git pull).

Судя по игнорированию проверки версии Redis, похоже, что недавно эта проверка стала обязательной. Я уже застрял в достаточно глубокой яме в пятницу и не хочу пытаться обновлять наш контейнер с данными без помощи… поэтому я попробую откатиться к ещё более ранней версии docker_discourse, чтобы вернуться в состояние, где требование к Redis пока не применяется (пока мы не обновим наш контейнер с данными).

Это не сработает, так как проверка происходит из основного репозитория. Оставлять контейнеры с данными без обновлений в течение нескольких лет — плохая идея, поскольку за этот период мы многократно выпускали исправления производительности и безопасности.
Ещё одна причина, по которой я не рекомендую настройку с отдельными контейнерами.

Вам необходимо пересобрать контейнер данных. См. также Обновление PostgreSQL 13

Спасибо. Прямо сейчас ждём обновления Postgres. :slight_smile:

И спасибо за ссылку на советы по обновлению Postgres 13. Очень полезно!