Не удалось удалить устаревший компонент темы из CLI — сбой инициализации

Я знаю, что проблема в компоненте Alternative Logos:

I, [2021-06-25T11:00:32.360020 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'bundle exec rake themes:update assets:precompile'
Failed to update Alternative Logos
about.json contains invalid values: Maximum discourse version is invalid
/var/www/discourse/app/models/remote_theme.rb:169:in `update_from_remote'
/var/www/discourse/lib/tasks/themes.rake:61:in `block (2 levels) in <main>'

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

Не уверен, что делает команда cleanup в отношении остановленных контейнеров, но, возможно, стоит просто выполнить ./launcher start app и отключить проблемное расширение (в https://your.domain/admin/customize/themes)?

Вы имеете в виду плагины в файле app.yml?

Да.

Я знаю, что проблема в плагине Alternative Logos:

I, [2021-06-25T11:00:32.360020 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'bundle exec rake themes:update assets:precompile'
Не удалось обновить Alternative Logos
about.json содержит недопустимые значения: Максимальная версия Discourse указана неверно
/var/www/discourse/app/models/remote_theme.rb:169:in `update_from_remote'
/var/www/discourse/lib/tasks/themes.rake:61:in `block (2 levels) in <main>'

У меня был этот компонент, но так как Discourse не работает, я не могу зайти в панель администратора, чтобы удалить его. Как удалить этот компонент темы через командную строку? Я не могу пересобрать или запустить приложение, так что это проблема.

Итак:

  • Я не могу пересобрать проект, потому что в Alternative Logos в файле about.json указана максимальная версия, которая ниже моей.
  • Я не могу удалить компонент Alternative Logos, не войдя в приложение.
  • Я не могу войти в приложение, потому что не могу его пересобрать.

Есть ли способ что-то сделать в этой ситуации? Я хочу удалить компонент Alternative Logos.

Разве нельзя просто запустить приложение, не пересобирая его?

./launcher start app

Не удалось найти образ 'local_discourse/app:latest' локально
docker: Ошибка ответа от демона: доступ к загрузке для local_discourse/app запрещен, репозиторий не существует или может потребоваться 'docker login': отказано: запрошенный доступ к ресурсу запрещен.
См. 'docker run --help'.

К сожалению, не очень

Тогда, возможно, git pull, но, может быть, стоит подождать подмоги :sweat_smile: (вижу, что Джей отвечает…)

Нет, git pull ничего не делает.

Вы пробовали

  ./launcher start app

Хотя, если вы выполнили ./launcher cleanup, пока старый контейнер был остановлен, и у вас нет контейнера для запуска, то вы оказались в довольно сложной ситуации. Это то, что вы сделали? Похоже, что именно это вы и сделали.

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

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

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

Возможно, вы сможете восстановить базу данных на чистой установке (может быть, она проигнорирует сломанную тему?), затем удалить вашу базу данных и создать новую пустую базу данных с обновлённым Discourse, после чего восстановить базу данных из удалённой чистой установки.

Другое решение — создать образ только с базой данных и с помощью SQL удалить сломанный компонент темы.

Полагаю, мне придётся выполнить чистую установку и восстановить данные из резервной копии (и в этом .sql-файле с резервной копией я внесу изменения в раздел «Альтернативные логотипы»).

Однако это действительно плохая ситуация: если компонент сломает Discourse, у вас не останется другого выбора, кроме как выполнить чистую переустановку.

Хорошо, решение заключалось в том, чтобы установить свежую версию Discourse, восстановить данные из резервной копии, а затем удалить компонент, вызывавший проблему.

У меня сегодня утром возникла похожая ситуация, но я просто перезапустил приложение.

На моём сайте около 10 тем оформления, и во всех из них использовался компонент «Альтернативные логотипы», поскольку каждая тема требует логотипов разного цвета для соответствия своей цветовой схеме. Я вижу, что теперь можно добавить логотипы для тёмной темы в настройках сайта. Однако, если я удалю этот устаревший компонент, где мне нужно будет добавить все остальные пользовательские логотипы для остальных тем?

Думаю, проблема только в файле about.json, и вы можете сделать форк компонента темы, чтобы создать свою версию. Но я не изучал это подробно и не пробовал сам.