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.rb が LlmModel.enable_or_disable_srv_llm! を呼び出しますが、これは llm_models.url カラムが存在することを前提としています。しかし、マイグレーション 20240514171609(このカラムを追加するマイグレーション)がまだ適用されていない場合、クラッシュします。
問題は、db:migrate もこのコードを実行してしまうことで、マイグレーションが適用される前にrakeタスクがクラッシュすることです。
提案される回避策/修正策:
- コードを
LlmModel.enable_or_disable_srv_llm! if Discourse.running_in_rack?に変更する(これによりdb:migrateが呼び出されなくなります)。
または - コードを
LlmModel.enable_or_disable_srv_llm! rescue nilに変更する(これによりクラッシュしなくなります)。
または - コアのブートストラップコード (こちら) を変更して、
PG::UndefinedTableに加えてPG::UndefinedColumnもキャッチするようにする(これにより、今回の問題だけでなく、将来同様の問題が発生した場合もキャッチされます)。