Сбой после последнего обновления

Всем привет,

только что попытался обновиться до (насколько я помню) бета-версии 9 через веб-интерфейс. К сожалению, это привело к ошибке, из-за чего я запустил rebuild app.

К сожалению, это тоже завершилось ошибкой, и я совершенно не понимаю, что мне теперь делать. Весь процесс снова и снова завершается следующим сообщением:

Tasks: TOP => db:migrate => db:load_config => environment
(Полный трассировочный вывод можно получить, запустив задачу с флагом --trace)
I, [2025-08-20T08:47:30.655625 #1]  INFO -- : 
I, [2025-08-20T08:47:30.655914 #1]  INFO -- : Завершение асинхронных процессов
I, [2025-08-20T08:47:30.655932 #1]  INFO -- : Отправка сигнала INT для HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/15/bin/postmaster -D /etc/postgresql/15/main pid: 47
I, [2025-08-20T08:47:30.655954 #1]  INFO -- : Отправка сигнала TERM для exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 114
2025-08-20 08:47:30.656 UTC [47] LOG:  получен запрос быстрого завершения
114:signal-handler (1755679650) Получен сигнал SIGTERM, планирование завершения...
114:M 20 Aug 2025 08:47:30.659 # Пользователь запросил завершение...
114:M 20 Aug 2025 08:47:30.659 * Сохранение финального снапшота RDB перед выходом.
2025-08-20 08:47:30.667 UTC [47] LOG:  отмена всех активных транзакций
2025-08-20 08:47:30.671 UTC [47] LOG:  фоновый рабочий "logical replication launcher" (PID 61) завершился с кодом выхода 1
2025-08-20 08:47:30.671 UTC [56] LOG:  завершение работы
2025-08-20 08:47:30.672 UTC [56] LOG:  начало контрольной точки: завершение работы, немедленное
2025-08-20 08:47:30.691 UTC [56] LOG:  контрольная точка завершена: записано 3 буфера (0.0%); добавлено 0 WAL-файлов, удалено 0, переработано 0; write=0.014 с, sync=0.002 с, total=0.020 с; sync files=3, longest=0.001 с, average=0.001 с; distance=5 КБ, estimate=5 КБ
114:M 20 Aug 2025 08:47:30.728 * База данных сохранена на диск
114:M 20 Aug 2025 08:47:30.728 # Redis теперь готов к выходу, до свидания...
2025-08-20 08:47:30.731 UTC [47] LOG:  система баз данных завершена


FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate' завершилась с ошибкой, код возврата #<Process::Status: pid 809 exit 1>
Место ошибки: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.3.0/lib/pups/exec_command.rb:131:in `spawn'
exec завершилась с ошибкой с параметрами {"cd"=>"$home", "tag"=>"migrate", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}
Инициализация завершилась с кодом выхода 1
** НЕ УДАЛОСЬ ЗАПУСТИТЬ ** пожалуйста, прокрутите вверх и найдите предыдущие сообщения об ошибках, их может быть несколько.
./discourse-doctor может помочь в диагностике проблемы.
0155b0ee2e7b8a2a7481eed0f002871675973ab2295296f71b2c366b875f12cf

Достаточно ли этой информации для диагностики или нужно что-то ещё?

Помогите!

Я только что увидел это в разделе MAIL TEST, когда запускал discourse-doctor:

Plugin name is 'discourse-topic-voting', but plugin directory is named 'discourse-feature-voting'
/var/www/discourse/plugins/discourse-topic-voting/plugin.rb:22: warning: already initialized constant DiscourseTopicVoting::PLUGIN_NAME
/var/www/discourse/plugins/discourse-feature-voting/plugin.rb:22: warning: previous definition of PLUGIN_NAME was here
rake aborted!
ArgumentError: Invalid route name, already in use: 'category_none_votes'  (ArgumentError)
You may have defined two routes with the same name using the `:as` option, or you may be overriding a route already defined by a resource with the same naming. For the latter, you can restrict the routes created with `resources` as explained here: 
https://guides.rubyonrails.org/routing.html#restricting-the-routes-created

          raise ArgumentError, "Invalid route name, already in use: '#{name}' \n" \
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/actionpack-8.0.2.1/lib/action_dispatch/routing/route_set.rb:649:in `add_route'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/actionpack-8.0.2.1/lib/action_dispatch/routing/mapper.rb:2062:in `add_route'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/actionpack-8.0.2.1/lib/action_dispatch/routing/mapper.rb:2033:in `decomposed_match'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/actionpack-8.0.2.1/lib/action_dispatch/routing/mapper.rb:1997:in `block in map_match'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/actionpack-8.0.2.1/lib/action_dispatch/routing/mapper.rb:1991:in `each'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/actionpack-8.0.2.1/lib/action_dispatch/routing/mapper.rb:1991:in `map_match'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/actionpack-8.0.2.1/lib/action_dispatch/routing/mapper.rb:1719:in `match'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/actionpack-8.0.2.1/lib/action_dispatch/routing/mapper.rb:768:in `map_method'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/actionpack-8.0.2.1/lib/action_dispatch/routing/mapper.rb:711:in `get'
/var/www/discourse/config/routes.rb:1346:in `block (4 levels) in <main>'
/var/www/discourse/config/routes.rb:1345:in `each'
/var/www/discourse/config/routes.rb:1345:in `block (3 levels) in <main>'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/actionpack-8.0.2.1/lib/action_dispatch/routing/mapper.rb:903:in `scope'
/var/www/discourse/config/routes.rb:1337:in `block (2 levels) in <main>'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/actionpack-8.0.2.1/lib/action_dispatch/routing/mapper.rb:903:in `scope'
/var/www/discourse/config/routes.rb:14:in `block in <main>'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/actionpack-8.0.2.1/lib/action_dispatch/routing/route_set.rb:479:in `instance_exec'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/actionpack-8.0.2.1/lib/action_dispatch/routing/route_set.rb:479:in `eval_block'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/actionpack-8.0.2.1/lib/action_dispatch/routing/route_set.rb:461:in `draw'
/var/www/discourse/config/routes.rb:10:in `<main>'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-8.0.2.1/lib/rails/application/routes_reloader.rb:64:in `load'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-8.0.2.1/lib/rails/application/routes_reloader.rb:64:in `block in load_paths'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-8.0.2.1/lib/rails/application/routes_reloader.rb:64:in `each'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-8.0.2.1/lib/rails/application/routes_reloader.rb:64:in `load_paths'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-8.0.2.1/lib/rails/application/routes_reloader.rb:25:in `reload!'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-8.0.2.1/lib/rails/application/routes_reloader.rb:52:in `block in updater'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-8.0.2.1/lib/active_support/file_update_checker.rb:85:in `execute'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-8.0.2.1/lib/rails/application/routes_reloader.rb:34:in `execute'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-8.0.2.1/lib/rails/application/routes_reloader.rb:39:in `execute_unless_loaded'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-8.0.2.1/lib/rails/application/finisher.rb:179:in `block in <module:Finisher>'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-8.0.2.1/lib/rails/initializable.rb:32:in `instance_exec'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-8.0.2.1/lib/rails/initializable.rb:32:in `run'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-8.0.2.1/lib/rails/initializable.rb:61:in `block in run_initializers'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-8.0.2.1/lib/rails/initializable.rb:60:in `run_initializers'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-8.0.2.1/lib/rails/application.rb:440:in `initialize!'
/var/www/discourse/config/environment.rb:7:in `<main>'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/bootsnap-1.18.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/zeitwerk-2.7.3/lib/zeitwerk/core_ext/kernel.rb:34:in `require'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-8.0.2.1/lib/rails/application.rb:416:in `require_environment!'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-8.0.2.1/lib/rails/application.rb:567:in `block in run_tasks_blocks'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
Tasks: TOP => emails:test => environment
(See full trace by running task with --trace)

До этого у меня были активны следующие плагины:

      - git clone https://github.com/discourse/docker_manager.git
      - git clone https://github.com/discourse/discourse-solved.git
      - git clone https://github.com/discourse/discourse-github.git
      - git clone https://github.com/discourse/discourse-data-explorer.git
      - git clone https://github.com/discourse/discourse-feature-voting.git
      - git clone https://github.com/discourse/discourse-affiliate.git
      - git clone https://github.com/discourse/discourse-akismet.git

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

          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/discourse-feature-voting.git
          - git clone https://github.com/discourse/discourse-akismet.git

discourse-feature-voting — это (очень) старое название плагина topic-voting, который теперь входит в состав ядра Discourse. Если вы удалите строку feature-voting из вашего файла app.yml и затем пересоберёте приложение, всё должно работать лучше :crossed_fingers:

Спасибо большое за быстрый ответ.

Сработало!