Я обновляюсь каждый месяц: сначала на нескольких системах разработки, а затем на рабочей.
В этом месячном цикле обновление не удалось на первой системе разработки. docker_manager обновился успешно, но обновление Discourse завершилось ошибкой с сообщением:
Произошла ошибка при обновлении Discourse. Пожалуйста, проверьте логи ниже.
Приложение Discourse полностью недоступно (отображается страница ошибки 500 «Oops»).
Вот что содержит лог на экране:
********************************************************
*** Пожалуйста, подождите, следующие шаги могут занять время ***
********************************************************
Перезапуск Unicorn для освобождения памяти
Перезапуск процесса unicorn: pid 50
Ожидание перезагрузки Unicorn.
Ожидание перезагрузки Unicorn..
Ожидание перезагрузки Unicorn...
Ожидание перезагрузки Unicorn....
Ожидание перезагрузки Unicorn.....
Ожидание перезагрузки Unicorn......
Ожидание перезагрузки Unicorn.......
Ожидание перезагрузки Unicorn........
Ожидание перезагрузки Unicorn.........
Ожидание перезагрузки Unicorn..........
Ожидание перезагрузки Unicorn...........
Остановка 7 воркеров Unicorn для освобождения памяти
Остановка очереди задач для возврата памяти, мастер pid 4069
$ cd /var/www/discourse && git fetch --tags --force && git reset --hard HEAD@{upstream}
From https://github.com/discourse/discourse
t [обновление тега] latest-release -> latest-release
* [новый тег] v2.8.14 -> v2.8.14
* [новый тег] v3.0.0 -> v3.0.0
HEAD теперь на 666536cbd1 DEV: Предпочитать \A и \z вместо ^ и $ в регулярных выражениях (#19936)
$ bundle install --deployment --jobs 4 --without test development
[УСТАРЕЛО] Флаг `--deployment` устарел, так как он зависит от сохранения состояния между вызовами bundler, чего bundler в будущих версиях делать не будет. Вместо этого используйте `bundle config set --local deployment 'true'` и прекратите использовать этот флаг.
[УСТАРЕЛО] Флаг `--without` устарел, так как он зависит от сохранения состояния между вызовами bundler, чего bundler в будущих версиях делать не будет. Вместо этого используйте `bundle config set --local without 'test development'` и прекратите использовать этот флаг.
Запущен Bundler 2.3.13, но ваш lockfile был создан с помощью версии 2.4.1. Устанавливаю Bundler 2.4.1 и перезапускаю с этой версией.
Получение метаданных gems из https://rubygems.org/.
Получение bundler 2.4.1
Установка bundler 2.4.1
[УСТАРЕЛО] Флаг `--deployment` устарел, так как он зависит от сохранения состояния между вызовами bundler, чего bundler в будущих версиях делать не будет. Вместо этого используйте `bundle config set --local deployment 'true'` и прекратите использовать этот флаг.
[УСТАРЕЛО] Флаг `--without` устарел, так как он зависит от сохранения состояния между вызовами bundler, чего bundler в будущих версиях делать не будет. Вместо этого используйте `bundle config set --local without 'test development'` и прекратите использовать этот флаг.
Получение метаданных gems из https://rubygems.org/.........
Получение https://github.com/rails/sprockets
web-push-3.0.0 требует версию Ruby >= 3.0, что несовместимо с текущей версией 2.7.6
Docker Manager: НЕ УДАЛОСЬ ОБНОВИТЬ
#<RuntimeError: RuntimeError>
/var/www/discourse/plugins/docker_manager/lib/docker_manager/upgrader.rb:209:in `run'
/var/www/discourse/plugins/docker_manager/lib/docker_manager/upgrader.rb:93:in `upgrade'
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:19:in `block in <main>'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-7.0.3.1/lib/active_support/fork_tracker.rb:20:in `block in fork'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-7.0.3.1/lib/active_support/fork_tracker.rb:18:in `fork'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-7.0.3.1/lib/active_support/fork_tracker.rb:18:in `fork'
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:6:in `<main>'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.3.1/lib/rails/commands/runner/runner_command.rb:43:in `load'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.3.1/lib/rails/commands/runner/runner_command.rb:43:in `perform'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.2.1/lib/thor/command.rb:27:in `run'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.2.1/lib/thor/invocation.rb:127:in `invoke_command'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.2.1/lib/thor.rb:392:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.3.1/lib/rails/command/base.rb:87:in `perform'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.3.1/lib/rails/command.rb:48:in `invoke'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.3.1/lib/rails/commands.rb:18:in `<main>'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/bootsnap-1.15.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/bootsnap-1.15.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require'
bin/rails:18:in `<main>'
Запуск 7 ранее остановленных воркеров Unicorn
Раньше у меня никогда не возникало ошибок при обновлении, поэтому я не уверен, что делать дальше. И что бы я сделал, если бы это произошло на рабочей системе?
Я предлагаю проверить, какая версия операционной системы (дистрибутива) у вас установлена: возможно, это старая версия, в которой нет Ruby 3, и это и есть проблема.
Редактирование: подождите, я не уверен, не путаю ли я что-то. Для продакшена всё происходит внутри контейнера Docker, в котором должны быть все нужные версии всего. У вас какая-то другая настройка?
Если это установки для разработки, они не будут репрезентативными для продакшн-установки Docker. Ваша среда разработки использует старую версию Ruby (2.7), тогда как в образе Discourse недавно была обновлена версия до 3.1.
У меня та же проблема: обновление не удалось, и форум упал с ошибками 500. Честно говоря, я удивлён, что эта проблема сохраняется уже три дня.
В любом случае, я сейчас запускаю пересборку через CLI, что, надеюсь, сработает. Если нет, я заранее сделал снимок виртуальной машины, потому что моя мама не вырастила глупца.
Судя по этому посту, они обновили Ruby до версии 3.0, что полностью ломает обновление через веб-интерфейс. К сожалению, программное обеспечение всё ещё позволяет пользователям пытаться это сделать, и тогда вы можете увидеть, как быстро ваш хост выдаёт ошибки HTTP 500.
Редактирование: Пересборка через CLI действительно сработала, уф!
Соответствующие ошибки:
Fetching gem metadata from https://rubygems.org/.........
Fetching https://github.com/rails/sprockets
web-push-3.0.0 requires ruby version >= 3.0, which is incompatible with the
current version, 2.7.6
Docker Manager: FAILED TO UPGRADE
#<RuntimeError: RuntimeError>
/var/www/discourse/plugins/docker_manager/lib/docker_manager/upgrader.rb:209:in `run'
/var/www/discourse/plugins/docker_manager/lib/docker_manager/upgrader.rb:93:in `upgrade'
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:19:in `block in <main>'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-7.0.3.1/lib/active_support/fork_tracker.rb:20:in `block in fork'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-7.0.3.1/lib/active_support/fork_tracker.rb:18:in `fork'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-7.0.3.1/lib/active_support/fork_tracker.rb:18:in `fork'
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:6:in `<main>'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.3.1/lib/rails/commands/runner/runner_command.rb:43:in `load'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.3.1/lib/rails/commands/runner/runner_command.rb:43:in `perform'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.2.1/lib/thor/command.rb:27:in `run'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.2.1/lib/thor/invocation.rb:127:in `invoke_command'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.2.1/lib/thor.rb:392:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.3.1/lib/rails/command/base.rb:87:in `perform'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.3.1/lib/rails/command.rb:48:in `invoke'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.3.1/lib/rails/commands.rb:18:in `<main>'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/bootsnap-1.15.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/bootsnap-1.15.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require'
bin/rails:18:in `<main>'