Обновление очень старой версии Discourse: ошибка Ruby

Я пытаюсь обновить очень старую установку.

Я начал с этого:

cd /var/discourse
sudo git pull
sudo ./launcher rebuild app

Затем я получил ошибку, и при прокрутке файла журнала единственной ошибкой было следующее:

ERROR: Error installing bundler:
bundler-2.5.3 requires Ruby version >= 3.0.0. The current ruby version is 2.7.2.137.

Как мне установить новую версию Ruby? Система изначально была установлена из образа Docker на Digital Ocean и не обновлялась, или обновлялась очень редко, в течение нескольких лет.

Она работает на Ubuntu 18.04.

Я запустил ./discourse-doctor

и обнаружил состояние отсоединённой головы (detached head), затем выполнил rebuild, но получил ту же ошибку с Ruby.

Я совершенно запутался.

Помогите, пожалуйста, как выполнить обновление с древней версии?

Возможно, ваш образ контейнера зафиксирован на очень старом базовом образе Discourse.

Можете ли вы опубликовать здесь свою (с удалёнными данными) конфигурацию контейнера?

Я не знаю, как это сделать, но в выводе discourse doctor я нашёл следующее:

DOCKER VERSION: Docker version 19.03.1, build 74b1e89

И он был создан 3 года назад

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

Это будет меньше работы (и гораздо проще), чем обновление существующего сервера.

Но так как установка не удалась, я не могу запустить Discourse, чтобы сделать резервную копию. Я могу и сделал снимок (snapshot) цифрового океана (DigitalOcean) droplet, но, насколько я понимаю, это не совсем резервная копия.

Вы должны иметь возможность просто выполнить ./launcher start app, чтобы перезагрузиться на старый сайт.

Попробовал, теперь получаю ошибку 502 Bad Gateway :sigh:

Я бы rsync-нул старый /var/discourse на новый сервер. Или, возможно, только containers и shared.

Окей, я здесь настолько не в своей тарелке, что моё решение — разместить платное объявление о поиске помощи на Маркетплейсе :grinning:

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

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

Сейчас, даже при ошибке «bad gateway», если вы сможете попасть в контейнер, вы сможете выполнить discourse backup и получить свои данные.