Distilando isso de Latest update won't build due to various reasons, já que esse tópico trata de três problemas diferentes no momento.
Problema:
Ao tentar atualizar o Discourse com o plugin de IA instalado, a atualização gera um erro com
PG::UndefinedColumn: ERROR: column llm_models.url does not exist
LINE 1: SELECT "llm_models".* FROM "llm_models" WHERE "llm_models"
e torna o Discourse inutilizável até que o plugin de IA seja removido.
Quando isso acontece:
Ao atualizar uma instância com o plugin de IA
De uma versão que ainda não possui a migração 20240514171609
Para o commit 8d5f901 ou mais recente
(Minha principal pergunta era por que isso só acontece ao atualizar um plugin já instalado e não quando o plugin é recém-instalado. A resposta é que o core captura exceções PG::UndefinedTable, mas não PG:UndefinedColumn. Se o plugin já estiver instalado, a exceção é a última; se o plugin for totalmente novo, é a primeira).
Razão:
plugin.rb chama LlmModel.enable_or_disable_srv_llm!, que depende da coluna llm_models.url estar presente. Mas se a migração 20240514171609 (que adiciona essa coluna) ainda não foi aplicada, ele falha.
O problema é que db:migrate também executa esse código, o que faz com que a tarefa rake falhe antes que a migração possa ser aplicada.
Soluções alternativas / correções sugeridas:
- alterar o código para
LlmModel.enable_or_disable_srv_llm! if Discourse.running_in_rack?(para quedb:migratenão a chame)
ou - alterar o código para
LlmModel.enable_or_disable_srv_llm! rescue nil(para que não falhe)
ou - alterar o código de bootstrap no core para capturar
PG::UndefinedColumnalém dePG::UndefinedTable(para que este e futuros problemas semelhantes sejam capturados)