L'aggiornamento del plugin AI fallisce

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:

  1. modificare il codice in LlmModel.enable_or_disable_srv_llm! if Discourse.running_in_rack? (in modo che db:migrate non lo chiami)
    o
  2. modificare il codice in LlmModel.enable_or_disable_srv_llm! rescue nil (in modo che non vada in crash)
    o
  3. modificare il codice di bootstrapping nel core per catturare PG::UndefinedColumn oltre a PG::UndefinedTable (in modo che questo e futuri problemi simili vengano catturati)

@Roman

6 Mi Piace

Grazie per avercelo fatto sapere, @RGJ. Mi occuperò di questo e aggiornerò una volta risolto.

7 Mi Piace

Ho inviato una correzione qui:

Fammi sapere se hai ancora problemi, per favore.

5 Mi Piace

Funziona a meraviglia! Grazie :slight_smile:

3 Mi Piace