AIプラグインの更新失敗

Latest update won't build due to various reasons から抽出しました。現在、そのトピックは3つの異なる問題について扱っているためです。

問題:

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 はキャッチしないためです。プラグインが既にインストールされている場合、例外は後者であり、プラグインが完全に新規の場合は前者です。)

原因:

plugin.rbLlmModel.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

修正をプッシュしました。

問題がまだ続く場合は、お知らせください。

「いいね!」 5

見事に機能しました!ありがとうございます :slight_smile:

「いいね!」 3