pfaffman
(Jay Pfaffman)
1
谢谢,@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”。
我本想说自己知道,但其实并不确定。我建议采用“猴子看,猴子做”的编程方式,除非有懂行的人提出更好的意见。
pfaffman
(Jay Pfaffman)
3
我完全没有动过 groups(我的插件里根本没显示 group),而且这些测试在 Discourse 各处都失败了。我再克隆一次 master 分支,看看是不是我的 fork 出了什么问题。再次感谢!
david
(David Taylor)
4
看起来您需要迁移测试数据库
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,否则您可能会误删开发数据库(这周我就意外发生过这种情况
)
pfaffman
(Jay Pfaffman)
5
也许这就是我的问题!我可能漏掉了测试环境而只设置了开发环境。谢谢。哦,对了,在去机场之前,我还需要在我的笔记本电脑上安装一个全新的开发环境。
david
(David Taylor)
6
我刚刚在测试套件开头添加了一个针对待处理迁移的检查,这样以后就更容易识别此类问题了
pfaffman
(Jay Pfaffman)
7
谢谢,David!我看到现在会打印警告了。我不太明白为什么迁移测试数据库这么困难,但在我执行了一系列 destroy、create、migrate 操作,并运行了你推荐的 RAILS_ENV=test bin/rake db:migrate 后,我发现我的 spec 出错了!现在我可以修复它了,我也踏上了学习如何编写 spec 的旅程!再次感谢你的推动,@Mittineague。
david
(David Taylor)
8
我这次提交的背景是发现了一个 bug:
RAILS_ENV=test rake db:drop db:create db:migrate
不会包含 post_deploy 迁移。你必须单独运行 db:migrate。
我们肯定会修复这个问题,但在此期间,这个警告应该能减少大家的挫败感!
pfaffman
(Jay Pfaffman)
9
这个问题修复了吗?看起来 ./bin/rake db:drop db:create 会删除并创建测试数据库,但似乎 ./bin/rake db:migrate 并没有在测试数据库上执行迁移。