Сборка завершена неудачей из-за ошибок yarn

При обновлении моего экземпляра с помощью команды ./launcher rebuild app на Ubuntu 22.04 возникает ошибка. Насколько я могу судить, проблемы начинаются здесь:

error /var/www/discourse/app/assets/javascripts/node_modules/discourse: Command failed.
Exit code: 1
Command: yarn --silent --cwd .. patch-package
Arguments: 
Directory: /var/www/discourse/app/assets/javascripts/node_modules/discourse
Output:
error Command "patch-package" not found.
error Command failed with exit code 1.

Выше есть несколько предупреждений вида «_ has unmet peer dependency», но это первая ошибка (за исключением «_ already exists» при настройке базы данных, но я понимаю, что это ожидаемое поведение).

К сожалению, обновление, с которого всё началось, пришлось на день перед моей семейной поездкой на машине, поэтому я был немного спеша и не успел разобраться с проблемой на месте. Но теперь я получаю эту ошибку постоянно. Хост полностью обновлён, и я не помню, чтобы делал что-то особенно необычное при настройке. Примерно 3 месяца назад я перенёс /var/discourse на отдельный том Digital Ocean (что, как я знаю, не рекомендуется из-за проблем с производительностью, но для форума с одним пользователем я решил, что это приемлемый компромисс), но после этого изменения всё работало нормально, насколько я могу судить.

Думаю, это просто предупреждения.

Если сайт не запустился, попробуйте

./launcher start app

Я запустил ./launcher start app и теперь получаю HTTP 502. В выводе ./launcher logs app я вижу:

[Wed 19 Jul 2023 10:18:34 PM UTC] Run reload cmd: sv reload nginx
fail: nginx: runsv not running
[Wed 19 Jul 2023 10:18:34 PM UTC] Reload error for :
Started runsvdir, PID is 530
ok: run: redis: (pid 542) 0s
ok: run: postgres: (pid 543) 0s
supervisor pid: 538 unicorn pid: 569
Could not find rtlcss-0.2.1, mini_racer-0.8.0, puma-6.3.0, msgpack-1.7.1, libv8-node-18.16.0.0-x86_64-linux in locally installed gems
Run `bundle install` to install missing gems.
config/unicorn_launcher: line 71: kill: (569) - No such process
config/unicorn_launcher: line 15: kill: (569) - No such process
(538) exiting

Это повторяется много раз.

Может быть, стоит выполнить bundle install?

Для этого мне нужно войти в контейнер. Я сделал это, и после запуска контейнера веб-интерфейс выдает:

Ой

Программное обеспечение, управляющее этим форумом, столкнулось с неожиданной проблемой. Приносим извинения за неудобства.

Подробная информация об ошибке была записана в журнал, и было автоматически сгенерировано уведомление. Мы разберемся в этом.

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

Команда ./launcher logs app выводит:

[Ср 19 июл 2023 23:52:05 UTC] Домены не изменены.
[Ср 19 июл 2023 23:52:05 UTC] Пропуск, следующее время обновления: 2023-08-21T00:34:21Z
[Ср 19 июл 2023 23:52:05 UTC] Добавьте '--force', чтобы принудительно обновить.
[Ср 19 июл 2023 23:52:05 UTC] Установка ключа в: /shared/ssl/distroleaders.club_ecc.key
[Ср 19 июл 2023 23:52:05 UTC] Установка полного цепочка в: /shared/ssl/distroleaders.club_ecc.cer
[Ср 19 июл 2023 23:52:05 UTC] Выполнение команды перезагрузки: sv reload nginx
ошибка: nginx: runsv не запущен
[Ср 19 июл 2023 23:52:05 UTC] Ошибка перезагрузки для :
Запущен runsvdir, PID = 530
ok: run: redis: (pid 544) 0s
ok: run: postgres: (pid 543) 0s
pid супервизора: 538 pid unicorna: 575

Если я снова войду в контейнер, я смогу успешно выполнить sv reload nginx, но это не меняет поведение.

Кроме того, если я снова запущу ./launcher rebuild app, мне придется снова войти в контейнер, чтобы выполнить bundle install.

Где-то там есть ещё одна ошибка. Пришлите весь лог.

У вас есть какие-нибудь нестандартные плагины?

Насколько я помню, нет (если только @mattdm не прокрался с ними, пока я не смотрел :smile:). Утилита discourse-doctor тоже сообщает: «Несанкционированные плагины не обнаружены».

Я имел в виду полный лог с пересборки.

Приношу свои извинения. Вот результат пересборки. Это то, что вы искали?

Вторая строка рассказывает всю историю

fatal: не репозиторий git (или любой родитель до точки монтирования /var)

Ваш каталог /var/discourse не является репозиторием git, что нарушает автоматическое обновление launcher и инструментов, которые мы используем для инициализации Discourse. В результате вы застряли на старом образе Docker.

Вам нужно отменить изменения, которые привели к этой проблеме.

При копировании файлов в ваш том вы не скопировали .git, поэтому вам нужно клонировать репозиторий и поместить туда остальные файлы.

Вам, вероятно, стоит сделать так, чтобы ваш том содержал только загрузки (uploads), что, как я предполагаю, занимает основную часть места. Тогда на томе останутся только загрузки и резервные копии.

О боже. Я, наверное, могу точно угадать, что я сделал, и это связано с тем, что * не совпадает с .git в команде rsync. Это не первый раз, когда я использую rsync, чтобы усложнить себе жизнь. Спасибо, что заметили это!

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

К счастью, у меня всё ещё есть архив до миграции, потому что я не утратил все навыки системного администратора за эти годы. :smile:

Это на самом маленьком инстансе Digital Ocean, поэтому в основном место занимает сама система. Загрузки и резервные копии вместе занимают около 100 МБ. Думаю, если я решу что-то изменить, то перейду на инстанс побольше с большим объёмом диска.

Спасибо за помощь, я очень ценю это!