Не удаётся обновить Ruby, поэтому ./launcher rebuild app постоянно завершается ошибкой

Привет,

Я недавно перенес образ сервера, на котором установлен Docker Discourse.

Мне удалось запустить всё необходимое, но теперь нужно перевыпустить SSL-сертификат.

Поскольку на старом сервере SSL был настроен, я следую совету из этого руководства и выполняю команду:
./launcher rebuild app

Это заставляет Docker загрузить и обновить ряд компонентов. Текущий образ: Discourse 2.6.0.beta3 - https://github.com/discourse/discourse version 29f7e0689f61c5d85960a88f741ac3abced12d3e.

При первом запуске появилась просьба о обновлении PostgreSQL, поэтому я выполнил ./launcher rebuild app ещё раз, как и рекомендовалось.

Теперь же процесс постоянно завершается ошибкой. Я полагаю, что причина в недостаточной версии Ruby, установленной в системе:

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

Ниже приведён полный вывод:

FAILED

--------------------

Pups::ExecError: cd /var/www/discourse && gem install bundler --conservative -v $(awk '/BUNDLED WITH/ { getline; gsub(/ /,""); print $0 }' Gemfile.lock) failed with return #<Process::Status: pid 304 exit 1>

Location of failure: /pups/lib/pups/exec_command.rb:112:in `spawn'

exec failed with the params {"cd"=>"$home", "hook"=>"web", "cmd"=>["gem install bundler --conservative -v $(awk '/BUNDLED WITH/ { getline; gsub(/ /,\"\"); print $0 }' Gemfile.lock)", "find $home ! -user discourse -exec chown discourse {} \\+"]}

2ad07f29ace1b5396d9944fc4fc5a1ec712727280e8bb3df760367d08bfe6a25

** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.

Я думал, что Docker автоматически обновит версию Ruby при необходимости?

Я пробовал вручную зайти в контейнер, установить RVM и активировать Ruby версии 3+, но ошибка остаётся прежней.

На данном этапе я немного растерян. Неужели установленная версия настолько устарела, что её нельзя обновить через ./launcher?

Любые советы будут очень кстати!

Просто примечание: это не сама ошибка, настоящие ошибки находятся выше.

Я рекомендую начать с нового образа и выполнить стандартную установку.

Спасибо, Джей. Я опасался, что это может быть единственный путь вперёд.

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

Попробуйте обновить все пакеты, используя apt upgrade

Это не сложно. Вы можете просто создать резервную копию или воспользоваться переносом сайта Discourse на другой VPS с помощью rsync. У вас нет ничего, что можно было бы потерять, поскольку ваш существующий сайт остаётся нетронутым. Это самый безопасный способ двигаться дальше.

Я обновил абсолютно всё, что мог, включая версию Ubuntu на сервере, и подтвердил, что у меня запущен Ruby v3.1.

Проблема в том, что, похоже, требуется другая версия Ruby внутри контейнера, которая управляется Docker, и мне не удаётся её обновить.

Мне всё же удалось установить чистую версию и запустить её 3.3.0.beta3-dev.

Однако при восстановлении резервной копии со старого сайта процесс, похоже, прошёл некорректно, и теперь страница входа не работает. В консоли JS при нажатии кнопок входа/регистрации появляется ошибка Discourse is not defined. Я полагаю, что из-за существенной разницы в версиях простое восстановление резервной копии 2.6.0 на чистую установку 3.3.0 не сработает.

Перенос всего на новый сервер тоже не удаётся, так как каждый раз ошибка Ruby блокирует выполнение команды ./launcher rebuild app.

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

Технически версии 3.3.0 ещё нет, мы всё ещё находимся на этапе бета-тестирования.

Спасибо за информацию. К сожалению, при попытке перейти по адресу /safe-mode меня снова перенаправляет на /login.

Думаю, я попробую переустановить и начать заново.

Я использовал официальный образ Discourse, но, похоже, он устанавливает последнюю версию, независимо от того, является ли она бета-версией. Или есть способ указать стабильную или конкретную версию?

Да, можно. Отредактируйте app.yml на чистой установке перед сборкой Discourse (поскольку откатить версию нельзя). Выберите нужный тег на GitHub. Мне приходилось делать это некоторое время назад, когда нужно было восстановить старую версию перед обновлением до последней.

Теперь я создаю образ рабочей версии перед обновлением, на случай если что-то пойдет не так.

Спасибо, благодарю за помощь!

Хорошая новость в том, что мне удалось разобраться, как установить более старую версию discourse_docker и ту же версию discourse, изменив файл app.yml.

Плохая новость в том, что я столкнулся с ещё одной ошибкой почти в конце установки.

FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake themes:update assets:precompile' failed with return #<Process::Status: pid 14351 exit 1>
Location of failure: /pups/lib/pups/exec_command.rb:112:in `spawn'
exec failed with the params {"cd"=>"$home", "hook"=>"assets_precompile", "cmd"=>["su discourse -c 'bundle exec rake themes:update assets:precompile'"]}

Мне придётся немного глубже разобраться в этом, похоже, проблема связана с Ruby/Rails внутри самого контейнера.

Попробуйте https://forum.example.com/login?safe_mode=no_themes%2Cno_plugins