Distillato da Latest update won't build due to various reasons poiché quell’argomento tratta al momento tre problemi diversi.
Problema:
Quando si tenta di aggiornare Discourse con il plugin AI installato, l’aggiornamento genera un errore con
PG::UndefinedColumn: ERROR: column llm_models.url does not exist
LINE 1: SELECT "llm_models".* FROM "llm_models" WHERE "llm_models"
e rende Discourse inutilizzabile finché il plugin AI non viene rimosso.
Quando succede:
Quando si aggiorna un’istanza con il plugin AI
Da una versione che non ha ancora la migrazione 20240514171609
Al commit 8d5f901 o più recente
(La mia domanda principale era perché questo accade solo quando si aggiorna un plugin già installato e non quando il plugin viene installato per la prima volta. La risposta è che il core cattura le eccezioni PG::UndefinedTable ma non PG:UndefinedColumn. Se il plugin è già installato, l’eccezione è quest’ultima, se il plugin è nuovo, è la prima).
Motivo:
plugin.rb chiama LlmModel.enable_or_disable_srv_llm! che dipende dalla presenza della colonna llm_models.url. Ma se la migrazione 20240514171609 (che aggiunge tale colonna) non è ancora stata applicata, si verifica un crash.
Il problema è che db:migrate esegue anche questo codice, il che causa il crash del task rake prima che la migrazione possa essere applicata.
Soluzioni alternative / Correzioni suggerite:
- modificare il codice in
LlmModel.enable_or_disable_srv_llm! if Discourse.running_in_rack?(in modo chedb:migratenon lo chiami)
o - modificare il codice in
LlmModel.enable_or_disable_srv_llm! rescue nil(in modo che non vada in crash)
o - modificare il codice di bootstrapping nel core per catturare
PG::UndefinedColumnoltre aPG::UndefinedTable(in modo che questo e futuri problemi simili vengano catturati)