Ошибка времени выполнения при обновлении до v3.0.3

Я только что ответил на уведомление по электронной почте «обновление в один клик» о выпуске новых исправлений безопасности и ошибок до версии 3.0.3 с моей текущей версии 3.0.1.

Первоначальное обновление Docker Manager прошло успешно (согласно отчёту о ходе обновления на веб-странице обновления), но когда я впоследствии нажал «обновить всё», чтобы обновить оставшиеся компоненты Discourse, для которых была доступна новая версия, это завершилось ошибкой, в результате чего мой сайт стал недоступен.

Странно, что в следующем окне отчёта о ходе обновления снова упоминается Docker Manager, хотя он только что был обновлён отдельно — на этот раз сообщается, что «обновление не удалось» и возникло «RuntimeError».

Правильно ли я понимаю, что это произошло из-за устаревшей версии Ruby, установленной на моём сервере Digital Ocean (v3.1 вместо v3.2)? Если так, я бы ожидал, что о таких новых зависимостях будет упомянуто в примечаниях к обновлению (этого не было в предыдущем обновлении), или же установщик в один клик должен был обработать это более корректно.

Ниже приведено содержимое окна следующего отчёта о ходе обновления:

********************************************************
*** Пожалуйста, будьте терпеливы, следующие шаги могут занять некоторое время ***
********************************************************
Перезапуск Unicorn для освобождения памяти
Перезапуск unicorn pid: 575
Ожидание перезагрузки Unicorn.
Ожидание перезагрузки Unicorn..
Ожидание перезагрузки Unicorn...
Ожидание перезагрузки Unicorn....
Ожидание перезагрузки Unicorn.....
Ожидание перезагрузки Unicorn......
Ожидание перезагрузки Unicorn.......
Ожидание перезагрузки Unicorn........
Ожидание перезагрузки Unicorn.........
Используется net-protocol 0.2.1
Загрузка addressable 2.8.4
Установка addressable 2.8.4
Используется aws-sigv4 1.5.0
Используется openssl-signature_algorithm 1.3.0
Используется sprockets 3.7.2 из https://github.com/rails/sprockets (at 3.x@f4d3dae)
Используется request_store 1.5.1
Используется message_bus 4.3.2
Используется pry 0.14.2
Загрузка rack-mini-profiler 3.1.0
Установка rack-mini-profiler 3.1.0
Загрузка rack-protection 3.0.6
Установка rack-protection 3.0.6
Используется ecma-re-validator 0.4.0
Используется faraday 2.7.4
Используется image_optim 0.31.3
Используется logstash-logger 0.26.1
Используется mini_racer 0.6.3
Используется mini_suffix 0.3.3
Используется omniauth 1.9.2
Используется uglifier 4.2.0
Используется web-push 3.0.0
Используется sidekiq 6.5.8
Используется redis-namespace 1.10.0
Используется net-http 0.3.2
Используется oauth-tty 1.0.5
Используется snaky_hash 2.0.1
Используется activesupport 7.0.4.3
Загрузка sass-embedded 1.62.0 (x86_64-linux-gnu)
Установка sass-embedded 1.62.0 (x86_64-linux-gnu)
Используется rqrcode 2.1.2
Используется rss 0.2.9
Загрузка tzinfo-data 1.2023.3
Установка tzinfo-data 1.2023.3
Используется unf 0.1.4
Используется unicorn 6.1.0
Загрузка loofah 2.20.0
Установка loofah 2.20.0
Используется ruby-readability 0.7.0
Используется sanitize 6.0.1
Используется net-imap 0.3.4
Используется net-pop 0.1.2
Используется net-smtp 0.3.3
Используется css_parser 1.14.0
Используется aws-sdk-core 3.130.2
Используется cose 1.3.0
Используется pry-byebug 3.10.1
Используется pry-rails 0.3.9
Используется json_schemer 0.2.23
Используется faraday-retry 2.1.0
Используется oauth2 1.4.11
Используется rtlcss 0.2.0
Используется rails-dom-testing 2.0.3
Используется globalid 1.1.0
Используется activemodel 7.0.4.3
Используется mini_scheduler 0.15.0
Используется oauth 1.1.0
Используется dartsass-ruby 3.0.1
Используется rails-html-sanitizer 1.5.0
Загрузка mail 2.8.1
Установка mail 2.8.1
Используется aws-sdk-kms 1.56.0
Используется aws-sdk-sns 1.53.0
Используется actionview 7.0.4.3
Используется activejob 7.0.4.3
Используется active_model_serializers 0.8.4
Используется activerecord 7.0.4.3
Используется omniauth-oauth2 1.7.3
Используется omniauth-oauth 1.2.0
Используется aws-sdk-s3 1.114.0
Используется actionpack 7.0.4.3
Используется actionview_precompiler 0.2.3
Используется discourse-seed-fu 2.3.12
Используется omniauth-facebook 9.0.0
Используется omniauth-github 1.4.0
Используется omniauth-google-oauth2 0.8.2
Используется omniauth-twitter 1.4.0
Используется actionmailer 7.0.4.3
Используется railties 7.0.4.3
Используется sprockets-rails 3.4.2
Используется dartsass-sprockets 3.0.0
Используется lograge 0.12.0
Загрузка rails_failover 1.0.0
Установка rails_failover 1.0.0
Используется rails_multisite 4.0.1
Загрузка puma 6.2.2
Установка puma 6.2.2 с нативными расширениями
Используется bootsnap 1.16.0
Используется rbtrace 0.4.14
Bundle complete! 136 зависимостей Gemfile, сейчас установлено 174 gem-а.
Gem-ы из групп 'test' и 'development' не были установлены.
Собранные gem-ы установлены в `./vendor/bundle`
$ yarn install --production
yarn install v1.22.19
[1/5] Проверка package.json...
[2/5] Разрешение пакетов...
[3/5] Загрузка пакетов...
[4/5] Связывание зависимостей...
warning " > @mixer/parallel-prettier@2.0.3" имеет невыполненную peer-зависимость "prettier@^2.0.0".
warning "eslint-config-discourse > eslint-plugin-lodash@7.1.0" имеет невыполненную peer-зависимость "lodash@>=4".
[5/5] Сборка свежих пакетов...
$ yarn --cwd app/assets/javascripts $(node -e 'if(JSON.parse(process.env.npm_config_argv).original.includes(`--frozen-lockfile`)){console.log(`--frozen-lockfile`)}')
yarn install v1.22.19
[1/4] Разрешение пакетов...
[2/4] Загрузка пакетов...
[3/4] Связывание зависимостей...
warning " > babel-plugin-debug-macros@0.4.0-pre1" имеет невыполненную peer-зависимость "@babel/core@^7.0.0".
warning "workspace-aggregator-61483bea-5d74-44aa-a245-abffc0a6319e > discourse > @uppy/aws-s3@3.0.6" имеет неверную peer-зависимость "@uppy/core@^3.1.2".
warning "workspace-aggregator-61483bea-5d74-44aa-a245-abffc0a6319e > discourse > @uppy/aws-s3-multipart@3.1.3" имеет неверную peer-зависимость "@uppy/core@^3.1.2".
warning "workspace-aggregator-61483bea-5d74-44aa-a245-abffc0a6319e > discourse > @uppy/xhr-upload@3.1.1" имеет неверную peer-зависимость "@uppy/core@^3.1.2".
[4/4] Сборка свежих пакетов...
success Сохранён lockfile.
$ patch-package
patch-package 6.5.1
Применение патчей...
@ember/jquery@2.0.0 ✔
virtual-dom@2.1.1 ✔
Done in 23.96s.
Done in 40.79s.
$ LOAD_PLUGINS=0 bundle exec rake plugin:pull_compatible_all
Discourse требует Ruby 3.2 или выше
Не удалось проверить совместимые версии плагинов
$ SKIP_POST_DEPLOYMENT_MIGRATIONS=1 bundle exec rake multisite:migrate
Discourse требует Ruby 3.2 или выше
Docker Manager: НЕ УДАЛОСЬ ОБНОВИТЬ
#<RuntimeError: RuntimeError>
/var/www/discourse/plugins/docker_manager/lib/docker_manager/upgrader.rb:202:in `run'
/var/www/discourse/plugins/docker_manager/lib/docker_manager/upgrader.rb:101:in `upgrade'
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:19:in `block in <main>'
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:6:in `fork'
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:6:in `<main>'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/railties-7.0.4.3/lib/rails/commands/runner/runner_command.rb:43:in `load'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/railties-7.0.4.3/lib/rails/commands/runner/runner_command.rb:43:in `perform'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/thor-1.2.1/lib/thor/command.rb:27:in `run'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/thor-1.2.1/lib/thor/invocation.rb:127:in `invoke_command'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/thor-1.2.1/lib/thor.rb:392:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/railties-7.0.4.3/lib/rails/command/base.rb:87:in `perform'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/railties-7.0.4.3/lib/rails/command.rb:48:in `invoke'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/railties-7.0.4.3/lib/rails/commands.rb:18:in `<main>'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/bootsnap-1.16.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/bootsnap-1.16.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require'
bin/rails:18:in `<main>'
Запуск 1 остановленного ранее воркера Unicorn

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

У меня происходит что-то похожее. Сейчас на форуме полная тишина…

Завтра я буду знать больше, когда не буду клевать носом. Похоже, это «момент истины».

-Уокер

Вам нужно загрузить новую версию образа Docker.

Кстати — эта ошибка возникает только в версиях 3.1.0.beta4 и выше, но не в стабильной версии 3.0.3.

Похоже, менеджер Docker должен знать, что обновление невозможно, верно? После обновления он должен требовать пересборку через командную строку. Мне казалось, что я видел увеличение версии в коммитах некоторое время назад, но, видимо, я ошибался.

Так что вам нужно выполнить

./launcher rebuild app

Спасибо — да, для меня проблема решилась, когда я пересобрал через Putty.

Да, это произошло совсем недавно. Update minimum image version for Ruby 3.2 (#176) · discourse/docker_manager@7e7b6b5 · GitHub

Docker Manager должен запрашивать пересборку через командную строку, если это требование не выполнено. :thinking:

Возможно, здесь есть какая-то ошибка или регрессия? Но я полагаю, вы уже занимаетесь этим. Похоже на ошибку, если Docker Manager не знает, что не сможет завершить работу успешно.

Можете ли вы подтвердить эти версии? Как отметил @RGJ в посте ниже, стабильные версии не требуют Ruby 3.2, поэтому при обновлении в стабильной ветке вы не должны сталкиваться с такими ошибками.

Не пытались ли вы случайно обновиться с v3.1.0.beta1 (или ещё более старой версии) до v3.1.0.beta4?

Проблема в том, что для Discourse v3.1.0.beta1 и ниже мы фиксируем docker_manager на старой версии. Вы увидите что-то вроде этого:

Обновление до v3.1.0.beta4 потребует Ruby 3.2, но возможно, вы используете Docker-образ, в котором ещё нет Ruby 3.2. Старый docker_manager считает это допустимым, поэтому позволяет выполнить обновление через интерфейс, хотя должно было бы запросить пересборку через CLI.

Я сейчас воспроизвожу проблему. Думаю, исправление будет заключаться в изменении зафиксированной версии, чтобы она запрашивала пересборку через CLI. Постараюсь найти решение…

Я видел это вчера для двух сайтов, которые прошли тестирование. Я не до конца уверен, с какой версии они обновлялись. Извините, что не могу предоставить более точные данные.

Теперь я не могу быть уверен, что обновление завершено, но, возможно, я обновлялся с версии 3.0.1 beta правка — НЕ с бета-версии 3.10.

Погодите. Нельзя перейти с бета-версии 3.1 на стабильную 3.0.3?

Хорошо, версия снова изменилась, но я почти уверен, что пытался обновиться с 3.0.1 (возможно, бета-версии) до стабильной 3.0.3, которая на тот момент казалась самым свежим стабильным вариантом. Я вижу, что после неудачи и повторной сборки в PuTTY результат пропустил запланированную версию 3.0.3 и фактически установил бета-версию 3.1.0 beta 4.

Да, это не сработало, потому что нельзя перейти с бета-версии 3.1 на стабильную версию 3.0.

Я не начинал с версии 3.1 beta. Я начал с версии 3.0.1 beta

Версии 3.01 не существует, есть либо 3.0.1, либо 3.1.0.
Но это не имеет особого значения. Ваша ситуация возникла из-за того, что вы переходили на бета-версию 3.1.0 beta4.

Вот моя точка зрения — я начинал с бета-версии 3.0.1, а полученное по электронной почте уведомление о простом обновлении касалось стабильной версии 3.0.3, обновление которой не удалось. На тот момент мне не было предложено перейти на бета-версию 3.1.0.

Возможно, часть проблемы заключалась в том, что вместо установки «рекламируемой» стабильной версии 3.0.3 обновляющая программа попыталась установить бета-версию 3.1.0?

В любом случае, насколько мне известно, единственная причина, по которой у меня сейчас установлена бета-версия 3.1.0, — это переустановка через PuTTY, которая загрузила последнюю бета-версию, а не последнюю стабильную версию.

Основная причина будет устранена сразу после слияния FIX: Update compatibility file for v3.1.0.beta1 and below by gschlager · Pull Request #178 · discourse/docker_manager · GitHub.