如何排查过时插件的数据库错误?

我是 Discourse 插件开发新手,刚开始我尝试将这个 quiz 插件 更新到最新版本的 Discourse。

如果不太麻烦的话,我能否寻求一些帮助来理解如何排查启用插件后,每次尝试创建或查看主题时出现的这个错误:

Message

Job exception: PG::UndefinedTable: ERROR:  relation "quizzes" does not exist
LINE 9:  WHERE a.attrelid = '"quizzes"'::regclass
                            ^


Backtrace

rack-mini-profiler-3.3.0/lib/patches/db/pg.rb:110:in `exec'
rack-mini-profiler-3.3.0/lib/patches/db/pg.rb:110:in `async_exec'
activerecord-7.0.8/lib/active_record/connection_adapters/postgresql/database_statements.rb:19:in `block (2 levels) in query'
activesupport-7.0.8/lib/active_support/concurrency/share_lock.rb:187:in `yield_shares'
activesupport-7.0.8/lib/active_support/dependencies/interlock.rb:41:in `permit_concurrent_loads'
activerecord-7.0.8/lib/active_record/connection_adapters/postgresql/database_statements.rb:18:in `block in query'
activesupport-7.0.8/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `handle_interrupt'
activesupport-7.0.8/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `synchronize'
activesupport-7.0.8/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `handle_interrupt'
activesupport-7.0.8/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `synchronize'

是否存在一些常见问题可能导致该关系不存在?这些问题通常会出现在 /db 目录下吗?

如果相关的话:我正在使用 Linux 上的 Docker 开发环境,如本 指南所述,您可以在 此处 查看我目前所做的更改。

看起来你还没有运行迁移
你需要一个额外的环境变量来为插件运行它们,请参阅:

2 个赞

感谢您的快速回复!我刚注意到 d/migrate,在我运行它之后似乎解决了问题。这与 LOAD_PLUGINS=1 RAILS_ENV=test rake db:migrate 相比如何?

d/migrate 是一个 docker 脚本包装器。

我分享的命令是实际运行的 rails 命令。

或者,您可以进入正在运行的容器并运行 rails 命令。

(但是的,您不需要定位测试环境!)

好的!感谢您的帮助。

我打开了 d/migrate,发现它包含了您共享命令中的所有内容,除了 LOAD_PLUGINS=1。我不确定为什么它在没有这个的情况下也能正常工作,但这对我来说都很好。

2 个赞

好样的!

总是要揭开面纱!很多人根本不看源代码,而这往往比你意识到的更有帮助!

是的,这是一个有趣的区分——不知道这是否只在为测试环境做这件事时才需要:thinking:

2 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.