从 Latest update won't build due to various reasons 中提炼出此信息,因为该主题目前涉及三个不同的问题。
问题:
安装 AI 插件后尝试更新 Discourse 时,更新会产生以下错误:
PG::UndefinedColumn: ERROR: column llm_models.url does not exist
LINE 1: SELECT "llm_models".* FROM "llm_models" WHERE "llm_models"
这会导致 Discourse 无法使用,直到移除 AI 插件。
何时发生:
更新已安装 AI 插件的实例时
从尚未应用迁移 20240514171609 的版本
更新到提交 8d5f901 或更新的版本
(我的主要问题是为什么只在更新已安装的插件时发生这种情况,而在新安装插件时不会发生。答案是,核心会捕获 PG::UndefinedTable 异常,但不会捕获 PG:UndefinedColumn。如果插件已安装,则异常是后者;如果插件是全新的,则异常是前者)。
原因:
plugin.rb 调用 LlmModel.enable_or_disable_srv_llm!,该函数依赖于 llm_models.url 列的存在。但如果迁移 20240514171609(该迁移添加了该列)尚未应用,则会崩溃。
问题在于 db:migrate 也会运行此代码,这会在迁移应用之前导致 rake 任务崩溃。
建议的解决方法/修复方法:
- 将代码更改为
LlmModel.enable_or_disable_srv_llm! if Discourse.running_in_rack?(这样db:migrate就不会调用它)
或 - 将代码更改为
LlmModel.enable_or_disable_srv_llm! rescue nil(这样就不会崩溃)
或 - 更改核心中的 引导代码,使其除了捕获
PG::UndefinedTable外,还能捕获PG::UndefinedColumn(这样就可以捕获此问题及未来类似的潜在问题)