./launcher rebuild app завершается с ошибкой 'bundle exec rake db:migrate': возможная проблема из-за удаления auth/oath2_authenticator в репозитории github/master

Всем привет, обращаюсь за помощью…

Я пытался разобраться и найти полную причину проблемы на моих долго работающих Ubuntu 20.x EC2-серверах с Discourse. Все они находятся на AWS и безупречно работали почти 3 года. Внезапно ни один из них больше не может пересобираться. Я сократил свой app.yml до минимального набора… искал бесконечно… Моя текущая установка использует Postgres 13 и Discourse 2.9.0 Beta 4 (я всегда держу систему обновлённой). Я использую стандартную установку на основе контейнеров Docker без каких-либо дополнительных компонентов (нет отдельных контейнеров или автономных установок другого программного обеспечения). Это лишь одна из множества догадок, но я заметил, что недавно в коде Discourse они удалили/переименовали auth/oauth2_authenticator в “ManagedAuthenticator” и “UserAssociatedAccount”.

Как можно увидеть здесь: DEV: Deprecate OAuth2Authenticator and OAuth2UserInfo (#15427) · discourse/discourse@78d0ec3 · GitHub

Комментарии в репозитории по поводу этого коммита:
DEV: Устаревание OAuth2Authenticator и OAuth2UserInfo (#15427)

Эти компоненты были заменены на ManagedAuthenticator и UserAssociatedAccount. Для получения дополнительной информации см. Adding a new 'managed' authentication method to Discourse

Вот мои логи в конце перед сбоем (и да, я запускал discourse-doctor, который выдаёт практически ту же информацию… Я также не использую NGINX, хотя видел, что это часто бывает причиной проблем):

I, [2022-05-17T21:26:52.663629 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'LOAD_PLUGINS=0 bundle exec rake plugin:pull_compatible_all'
I, [2022-05-17T21:26:54.697333 #1]  INFO -- : discourse-chat-integration уже находится в последней совместимой версии
discourse-rss-polling уже находится в последней совместимой версии
discourse-assign уже находится в последней совместимой версии
discourse-azure-ad уже находится в последней совместимой версии
discourse-solved уже находится в последней совместимой версии
discourse-knowledge-explorer уже находится в последней совместимой версии
docker_manager уже находится в последней совместимой версии

I, [2022-05-17T21:26:54.697677 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate'
rake aborted!
LoadError: невозможно загрузить файл -- auth/oauth2_authenticator
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/bootsnap-1.11.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:15:in `require'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/bootsnap-1.11.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:15:in `require'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/zeitwerk-2.5.4/lib/zeitwerk/kernel.rb:35:in `require'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-7.0.3/lib/active_support/dependencies/require_dependency.rb:21:in `require_dependency'
/var/www/discourse/lib/require_dependency_backward_compatibility.rb:18:in `require_dependency'
/var/www/discourse/plugins/discourse-azure-ad/plugin.rb:7:in `activate!'
/var/www/discourse/lib/plugin/instance.rb:679:in `instance_eval'
/var/www/discourse/lib/plugin/instance.rb:679:in `activate!'
/var/www/discourse/lib/discourse.rb:279:in `block in activate_plugins!'
/var/www/discourse/lib/discourse.rb:276:in `each'
/var/www/discourse/lib/discourse.rb:276:in `activate_plugins!'
/var/www/discourse/config/application.rb:222:in `block in <class:Application>'
/var/www/discourse/lib/plugin.rb:6:in `initialization_guard'
/var/www/discourse/config/application.rb:221:in `<class:Application>'
/var/www/discourse/config/application.rb:81:in `<module:Discourse>'
/var/www/discourse/config/application.rb:80:in `<top (required)>'
/var/www/discourse/Rakefile:7:in `require'
/var/www/discourse/Rakefile:7:in `<top (required)>'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/exe/rake:27:in `<top (required)>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
(Полный трассировочный вывод можно получить, запустив задачу с флагом --trace)
I, [2022-05-17T21:26:55.807801 #1]  INFO -- :
I, [2022-05-17T21:26:55.808466 #1]  INFO -- : Завершение асинхронных процессов
I, [2022-05-17T21:26:55.808709 #1]  INFO -- : Отправка INT для HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/13/bin/postmaster -D /etc/postgresql/13/main pid: 44
I, [2022-05-17T21:26:55.808935 #1]  INFO -- : Отправка TERM для exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 105
2022-05-17 21:26:55.808 UTC [44] LOG:  получен запрос на быстрое завершение работы
105:signal-handler (1652822815) Получен SIGTERM, планирование завершения работы...
2022-05-17 21:26:55.810 UTC [44] LOG:  отмена всех активных транзакций
2022-05-17 21:26:55.815 UTC [44] LOG:  фоновый рабочий "запускщик логической репликации" (PID 53) завершился с кодом выхода 1
2022-05-17 21:26:55.816 UTC [48] LOG:  завершение работы
2022-05-17 21:26:55.851 UTC [44] LOG:  система баз данных завершена
105:M 17 May 2022 21:26:55.894 # Пользователь запросил завершение работы...
105:M 17 May 2022 21:26:55.894 * Сохранение финального снимка RDB перед выходом.
105:M 17 May 2022 21:26:55.940 * База данных сохранена на диск
105:M 17 May 2022 21:26:55.941 # Redis теперь готов к выходу, до свидания...


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

Но, похоже, что она не обновлялась уже два года? (Или, возможно, я посмотрел не ту?) Так что это, скорее всего, и есть ваша проблема. Я подозреваю, что теперь существует какое-то другое решение.

Верно, плагин azure-ad больше не поддерживается и был заархивирован на GitHub. Лучшей альтернативой, вероятно, является

(Инструкции по Azure AD находятся в нижней части этого сообщения)

Это невероятно полезно, спасибо, но одновременно и крайне разочаровывает, так как это решение уже было внедрено и используется многими пользователями. Этот плагин был прост в использовании, и из-за того, что он не является сторонним, я был уверен, что в будущем это будет как минимум частично поддерживаемое решение. Похоже, если бы они не просто удалили/переименовали auth/oauth2_authenticator из репозитория, а вместо этого просто добавили один или два новых файла и пошли дальше, у меня не возникло бы этой проблемы.

Конечно, я изучу возможность использования плагина аутентификации OpenID Connect, но его внедрение потребует огромного объема работы.

Даже официальный код может быть выведен из эксплуатации. Это звучит как проблема ваших процессов выпуска, а не что-то, связанное с Discourse.

Если у вас «очень много пользователей», вам, вероятно, следует рассмотреть возможность проведения всех обновлений через тестовую копию вашего сайта. Слепое обновление продакшн-сервера без предварительной проверки процесса — крайне рискованно.

Спасибо, я не собирался слепо обновлять свой продакшн-сервер ;). У меня есть довольно много окружений, которые нужно тщательно протестировать в первую очередь.

Речь скорее о том, чтобы сообщать об изменениях после тестирования и быть максимально внимательным при поиске различий в новой конфигурации.