Distillant ceci de Latest update won't build due to various reasons car ce sujet traite actuellement de trois problèmes différents.
Problème :
Lors de la mise à jour de Discourse avec le plugin AI installé, la mise à jour génère une erreur avec
PG::UndefinedColumn: ERROR: column llm_models.url does not exist
LINE 1: SELECT "llm_models".* FROM "llm_models" WHERE "llm_models"
et rend Discourse inutilisable jusqu’à ce que le plugin AI soit supprimé.
Quand cela se produit :
Lors de la mise à jour d’une instance avec le plugin AI
Depuis une version qui n’a pas encore la migration 20240514171609
Jusqu’au commit 8d5f901 ou plus récent
(Ma question principale était de savoir pourquoi cela ne se produit que lors de la mise à jour d’un plugin déjà installé et non lors de l’installation d’un nouveau plugin. La réponse est que le cœur intercepte les exceptions PG::UndefinedTable mais pas PG:UndefinedColumn. Si le plugin est déjà installé, l’exception est la dernière, s’il est tout nouveau, c’est la première).
Raison :
plugin.rb appelle LlmModel.enable_or_disable_srv_llm! qui dépend de la présence de la colonne llm_models.url. Mais si la migration 20240514171609 (qui ajoute cette colonne) n’a pas encore été appliquée, cela plante.
Le problème est que db:migrate exécute également ce code, ce qui fait planter la tâche rake avant que la migration ne puisse être appliquée.
Solutions de contournement / Correctifs suggérés :
- changer le code en
LlmModel.enable_or_disable_srv_llm! if Discourse.running_in_rack?(pour quedb:migratene l’appelle pas)
ou - changer le code en
LlmModel.enable_or_disable_srv_llm! rescue nil(pour qu’il ne plante pas)
ou - changer le code de démarrage dans le cœur pour intercepter
PG::UndefinedColumnen plus dePG::UndefinedTable(pour que cela et les problèmes futurs similaires soient interceptés)