【发布时间】:2021-04-10 12:44:03
【问题描述】:
在使用 Postgres 数据库的 Rails 项目中,我使用 rspec 进行测试。在我添加另一个迁移之前,这一直很好。现在 rspec 失败了:
Failure/Error: ActiveRecord::Migration.maintain_test_schema!
PG::ConnectionBad:
connection is closed
我尝试了多种方式准备测试数据库:
rails db:reset RAILS_ENV=test
rails db:prepare RAILS_ENV=test
rails db:migrate RAILS_ENV=test
还有
rails db:test:prepare
在我添加迁移之前,我的测试一直有效,很明显有些地方出了问题,但是什么?
编辑添加更多细节:
虽然 Postgres 日志根本没有透露,但我确实发现了以下内容:
错误出现在rails_helper.rb的这一行:
ActiveRecord::Migration.maintain_test_schema!
从test 环境中的Rails 控制台,我可以毫无问题地调用maintain_test_schema! 方法:
root@0bf32217fb90:/home/dora/rails# bin/rails c -e test
Loading test environment (Rails 6.0.3.4)
[1] pry(main)> ActiveRecord::Migration.maintain_test_schema!
(1.2ms) SELECT "ar_internal_metadata"."value" FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1 [["key", "schema_sha1"]]
(1.8ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC
=> nil
[2] pry(main)>
显然从rspec调用方法和从控制台调用它是有区别的。
我会不断更新以供其他人说,如果有人偶然发现并知道解决方案,我将不胜感激。
【问题讨论】:
-
尝试查看您的 postgresql 日志。
-
日志没有包含任何揭示内容,只是关于当前时区的一些陈述。我已经用其他信息更新了我的问题。显然,错误只发生在给定的上下文中。
-
在将我的应用程序从 Rails 5.2 升级到 6.0 后,我遇到了同样的问题。你找到解决办法了吗?谢谢。
-
@AndyWang 不幸的是没有。我在
spec_helper.rb中注释掉了调用ActiveRecord::Migration.maintain_test_schema!的块,这让我可以运行测试,但我不认为这是一个修复...
标签: ruby-on-rails postgresql rspec