AI 플러그인 업데이트 실패

해당 토픽은 현재 세 가지 서로 다른 문제를 다루고 있으므로, 이 내용은 Latest update won't build due to various reasons 에서 분리해 정리합니다.

문제:

AI 플러그인이 설치된 상태에서 Discourse를 업데이트하려고 하면 다음 오류가 발생합니다.

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

그리고 AI 플러그인이 제거될 때까지 Discourse를 사용할 수 없게 됩니다.

발생 시점:

AI 플러그인이 설치된 인스턴스를 업데이트할 때

  • 20240514171609 마이그레이션이 아직 적용되지 않은 버전에서
  • 커밋 8d5f901 또는 그 이후 버전으로

(제 주요 질문은 왜 이 문제가 이미 설치된 플러그인을 업데이트할 때만 발생하고, 플러그인을 새로 설치할 때는 발생하지 않는지에 대한 것이었습니다. 그 이유는 코어가 PG::UndefinedTable 예외는 포착하지만 PG::UndefinedColumn은 포착하지 않기 때문입니다. 플러그인이 이미 설치된 상태라면 예외는 후자(PG::UndefinedColumn)가 되고, 플러그인이 완전히 새로운 상태라면 전자(PG::UndefinedTable)가 됩니다).

원인:

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::UndefinedTable 외에도 PG::UndefinedColumn을 포착하도록 변경 (이것과 향후 유사한 문제가 포착되도록 함)

@Roman

6개의 좋아요

@RGJ, 알려주셔서 감사합니다. 제가 처리해서 수정되는 대로 업데이트하겠습니다.

7개의 좋아요

여기서 수정 사항을 push했습니다:

여전히 문제가 있다면 알려주세요.

5개의 좋아요

완벽하게 작동해요! 감사합니다 :slight_smile:

3개의 좋아요