Destilando esto de Latest update won't build due to various reasons ya que ese tema trata sobre tres problemas diferentes en este momento.
Problema:
Al intentar actualizar Discourse con el plugin de IA instalado, la actualización genera un error con
PG::UndefinedColumn: ERROR: column llm_models.url does not exist
LINE 1: SELECT "llm_models".* FROM "llm_models" WHERE "llm_models"
y deja Discourse inutilizable hasta que se elimine el plugin de IA.
Cuándo ocurre esto:
Al actualizar una instancia con el plugin de IA
Desde una versión que aún no tiene la migración 20240514171609
A commit 8d5f901 o posterior
(Mi pregunta principal era por qué esto solo ocurre al actualizar un plugin ya instalado y no cuando el plugin se instala por primera vez. La respuesta es que el núcleo captura excepciones PG::UndefinedTable pero no PG:UndefinedColumn. Si el plugin ya está instalado, la excepción es la última; si el plugin es completamente nuevo, es la primera).
Razón:
plugin.rb llama a LlmModel.enable_or_disable_srv_llm! que depende de que la columna llm_models.url esté presente. Pero si la migración 20240514171609 (que agrega esa columna) aún no se ha aplicado, falla.
El problema es que db:migrate también ejecuta este código, lo que hace que la tarea rake falle antes de que se pueda aplicar la migración.
Soluciones alternativas / correcciones sugeridas:
- cambiar el código a
LlmModel.enable_or_disable_srv_llm! if Discourse.running_in_rack?(para quedb:migrateno lo llame)
o - cambiar el código a
LlmModel.enable_or_disable_srv_llm! rescue nil(para que no falle)
o - cambiar el código de arranque en el núcleo para capturar
PG::UndefinedColumnademás dePG::UndefinedTable(para que esto y problemas similares futuros sean capturados)