更新 AI 插件失败

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 任务崩溃。

建议的解决方法/修复方法:

  1. 将代码更改为 LlmModel.enable_or_disable_srv_llm! if Discourse.running_in_rack?(这样 db:migrate 就不会调用它)
  2. 将代码更改为 LlmModel.enable_or_disable_srv_llm! rescue nil(这样就不会崩溃)
  3. 更改核心中的 引导代码,使其除了捕获 PG::UndefinedTable 外,还能捕获 PG::UndefinedColumn(这样就可以捕获此问题及未来类似的潜在问题)

@Roman

6 个赞

感谢告知,@RGJ。我会处理此事,修复后会及时更新。

7 个赞

已在此处推送修复程序:

如果您仍然遇到问题,请告知我。

5 个赞

太棒了!谢谢你 :slight_smile:

3 个赞