迁移测试数据库时遇到的问题

谢谢,@Mittineague

过了一段时间,这变得合理了。我甚至写了一份规范,但即使在我添加规范之前(以及在我回滚到添加任何代码之前的状态),规范仍然失败,原因如下:

在加载 ./plugins/discourse-prometheus/spec/middleware/metrics_spec.rb 时发生错误。
Failure/Error: Group.find_by(id: id)

ActiveRecord::StatementInvalid:
  PG::UndefinedTable: 错误:关系 "groups" 不存在
  LINE 8:  WHERE a.attrelid = '"groups"'::regclass
                              ^
# (eval):24:in `async_exec'
# (eval):24:in `async_exec'
# ./app/models/group.rb:529:in `lookup_group'
# ./app/models/group.rb:513:in `block in ensure_automatic_groups!'
# ./app/models/group.rb:512:in `each_key'
# ./app/models/group.rb:512:in `ensure_automatic_groups!'
# (eval):3:in `block (2 levels) in run_file'
# ./spec/rails_helper.rb:79:in `<top (required)>'
# ./plugins/discourse-prometheus/spec/middleware/metrics_spec.rb:3:in `require'
# ./plugins/discourse-prometheus/spec/middleware/metrics_spec.rb:3:in `<top (required)>'
# ------------------
# --- 原因如下:---
# PG::UndefinedTable:
#   错误:关系 "groups" 不存在
#   LINE 8:  WHERE a.attrelid = '"groups"'::regclass
#                               ^
#   (eval):24:in `async_exec'
未找到任何示例。

这似乎影响了站点中几乎所有的规范。我认为我已经正确地执行了 git reset --hard upstream/master 以回到应该正常工作的状态,然后删除并重新创建了数据库,但我仍然遇到这个错误。

我承认我不太擅长阅读错误信息。我查看了他们所引用的文件,但没有看到任何“group(s)”这一行。

如果这是你自己的代码,这可能是我也容易犯的错误,即:何时复数形式意味着多个,何时只是习惯用法

也就是说,你可能在想“groups”时,语法却要求不带“s”的“group”。

类似地,有时代码需要特定的大小写,例如“Group”与“group”。

我本想说自己知道,但其实并不确定。我建议采用“猴子看,猴子做”的编程方式,除非有懂行的人提出更好的意见。

我完全没有动过 groups(我的插件里根本没显示 group),而且这些测试在 Discourse 各处都失败了。我再克隆一次 master 分支,看看是不是我的 fork 出了什么问题。再次感谢!

看起来您需要迁移测试数据库

RAILS_ENV=test bin/rake db:migrate

如果不起作用,就彻底重置并重新开始:

RAILS_ENV=test bin/rake db:drop
RAILS_ENV=test bin/rake db:create
RAILS_ENV=test bin/rake db:migrate

务必确认添加了 RAILS_ENV=test,否则您可能会误删开发数据库(这周我就意外发生过这种情况 :man_facepalming:)

也许这就是我的问题!我可能漏掉了测试环境而只设置了开发环境。谢谢。哦,对了,在去机场之前,我还需要在我的笔记本电脑上安装一个全新的开发环境。

我刚刚在测试套件开头添加了一个针对待处理迁移的检查,这样以后就更容易识别此类问题了

谢谢,David!我看到现在会打印警告了。我不太明白为什么迁移测试数据库这么困难,但在我执行了一系列 destroy、create、migrate 操作,并运行了你推荐的 RAILS_ENV=test bin/rake db:migrate 后,我发现我的 spec 出错了!现在我可以修复它了,我也踏上了学习如何编写 spec 的旅程!再次感谢你的推动,@Mittineague

我这次提交的背景是发现了一个 bug:

RAILS_ENV=test rake db:drop db:create db:migrate

不会包含 post_deploy 迁移。你必须单独运行 db:migrate

我们肯定会修复这个问题,但在此期间,这个警告应该能减少大家的挫败感!

这个问题修复了吗?看起来 ./bin/rake db:drop db:create 会删除并创建测试数据库,但似乎 ./bin/rake db:migrate 并没有在测试数据库上执行迁移。