Ошибка обновления плагина AI

Обобщено из Latest update won't build due to various reasons, так как в этой теме в настоящее время обсуждаются три разные проблемы.

Проблема:

При попытке обновить Discourse с установленным плагином AI обновление завершается ошибкой:

PG::UndefinedColumn: ERROR:  column llm_models.url does not exist
LINE 1: SELECT "llm_models".* FROM "llm_models" WHERE "llm_models"

и делает Discourse неработоспособным до тех пор, пока плагин AI не будет удален.

Когда это происходит:

При обновлении экземпляра с плагином AI
С версии, в которой еще нет миграции 20240514171609
До коммита 8d5f901 или более новой версии

(Мой главный вопрос заключался в том, почему это происходит только при обновлении уже установленного плагина, а не при новой установке плагина. Ответ: ядро перехватывает исключения PG::UndefinedTable, но не PG::UndefinedColumn. Если плагин уже установлен, возникает второе исключение; если плагин совершенно новый — первое).

Причина:

В файле plugin.rb вызывается LlmModel.enable_or_disable_srv_llm!, который зависит от наличия столбца llm_models.url. Однако, если миграция 20240514171609 (которая добавляет этот столбец) еще не применена, происходит сбой.

Проблема в том, что db:migrate также выполняет этот код, что приводит к сбою задачи rake до того, как миграция сможет быть применена.

Предлагаемые обходные пути / исправления:

  1. Изменить код на LlmModel.enable_or_disable_srv_llm! if Discourse.running_in_rack? (чтобы db:migrate не вызывал эту функцию)
    или
  2. Изменить код на LlmModel.enable_or_disable_srv_llm! rescue nil (чтобы не происходил сбой)
    или
  3. Изменить код инициализации в ядре, чтобы перехватывать PG::UndefinedColumn в дополнение к PG::UndefinedTable (чтобы перехватывались и это, и подобные проблемы в будущем)

@Roman

6 лайков

Спасибо, что сообщили нам, @RGJ. Я займусь этим и обновлю информацию, как только всё будет исправлено.

7 лайков

Внес исправление здесь:

Дайте знать, пожалуйста, если проблемы сохранятся.

5 лайков

Работает как по маслу! Спасибо :slight_smile:

3 лайка