Застрял на ошибке ./launcher rebuild app (Process::Status: pid 2096)

Сегодня при выполнении команды ./launcher rebuild app (без видимой причины) я получаю эту ошибку (кстати, это после того, как я отключил все плагины в файле app.yml)… Буду очень признателен за любую помощь в решении этой проблемы!

error-log_2024-10-31_1.txt (44.1 КБ)

Содержимое заканчивается следующим образом…

FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate' failed with return #<Process::Status: pid 2096 exit 1>
Location of failure: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
exec failed with the params {"cd"=>"$home", "tag"=>"migrate", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}
bootstrap failed with exit code 1
** FAILED TO BOOTSTRAP **

Соответствующая часть лога:

undefined method `+' for nil
/var/www/discourse/db/migrate/20241025045928_add_invites_link_to_sidebar.rb:44:in `up'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-7.1.4.2/lib/active_record/migration.rb:989:in `public_send'

Похоже, это связано с FEATURE: Add invite link to the sidebar (#29448) · discourse/discourse@19672fa · GitHub (cc @osama)

Большое спасибо (и за объяснение)! Я тоже это заметил и подумал, не в этом ли дело!

@denvergeeks Я собираюсь исправить миграцию, но мне немного интересно, как ваш сайт оказался в таком состоянии. Как выглядит боковая панель на вашем сайте? Вы удалили все ссылки из боковой панели по умолчанию из базы данных?

Конечно — у меня нет скриншота боковой панели или сайта, но ничего не изменено, кроме добавления нескольких базовых пунктов меню в разделе «Ещё»…

Это один из моих (непубличных) личных исследовательских экземпляров Discourse, поэтому я могу помочь с отладкой, если вы скажете, что именно нужно выполнить в командной строке. (У меня есть собственный выделенный сервер, если это поможет.)

Можете ли вы сказать, что выдают следующие запросы в вашей базе данных?

SELECT id FROM sidebar_sections WHERE section_type = 0;
SELECT linkable_type, linkable_id, position FROM sidebar_section_links WHERE sidebar_section_id IN (SELECT id FROM sidebar_sections WHERE section_type = 0);
SELECT id, segment FROM sidebar_urls WHERE id IN (SELECT linkable_id FROM sidebar_section_links WHERE sidebar_section_id IN (SELECT id FROM sidebar_sections WHERE section_type = 0));

Конечно, я могу помочь. Не могли бы вы предоставить команды с самого начала/из приглашения? (Я пользователь root)

Я не могу точно вспомнить команду(-ы) сходу, но я посмотрел здесь в Meta и думаю, что эти команды сработают:

./launcher enter app
su postgres
psql

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

root@JEN /var/discourse # ./launcher enter app101
su postgres
psql
Обнаружена архитектура x86_64.
Ошибка ответа от демона: контейнер 8ee36bdfa85b786ea149e6714f65048e136091fe31be2f5425be5fe04a852729 не запущен
su: пользователь postgres не существует или запись пользователя не содержит всех необходимых полей
Команда 'psql' не найдена, но её можно установить с помощью:
apt install postgresql-client-common

Хм, похоже, ваш контейнер не запущен. Ваш сайт сейчас недоступен? Попробуйте:

./launcher start app101
root@JEN /var/discourse # ./launcher start app101
Обнаружена архитектура x86_64.

запуск существующего контейнера
+ /usr/bin/docker start app101
app101
root@JEN /var/discourse # ./launcher enter app101
su postgres
psql
Обнаружена архитектура x86_64.
root@JEN-app101:/var/www/discourse# SELECT id FROM sidebar_sections WHERE section_type = 0;
bash: SELECT: команда не найдена
root@JEN-app101:/var/www/discourse#

Сайт запущен, вот боковая панель и …еще элементы

Понятно, теперь всё ясно. Миграция ожидает как минимум одну ссылку вне блока ... more, но у вас их нет, поэтому происходит ошибка. Я обновлю миграцию, чтобы она учитывала этот случай.

У меня возникла та же ошибка (и контейнер остановился) на одном из других моих сайтов. (Но не на некоторых других сайтах.)

Редактирование: Да, так что на том другом сайте (где я обнаружил такое же поведение) также нет ссылки вне блока ... more.

Итак, мы закончили?

На изображении размытое, низкоразрешающее фото лица маленького ребенка, который смотрит прямо в камеру и улыбается. (Подпись сгенерирована ИИ)

Извините, @denvergeeks, возникли личные неотложные дела, и мне пришлось отлучиться на пару часов. Я подготовил PR с исправлением:

Сообщу, когда он будет принят и пройдут все тесты.

@denvergeeks, исправление уже в ветке tests-passed. Если вы сейчас пересоберёте проект, всё должно пройти успешно.