【问题标题】:How to debug "database does not exist" error in test suite?如何调试测试套件中的“数据库不存在”错误?
【发布时间】:2013-11-30 17:07:07
【问题描述】:

我最近在一台新机器上设置了 Rails 开发环境。我现在正在尝试运行应用程序的测试套件,但不断收到数据库错误。

Failure/Error: user = FactoryGirl.create(:user)
PG::ConnectionBad:
FATAL:  database "test-db" does not exist

我的 database.yml 文件设置正确。我已经运行 psql -l 并且 test-db 实际上确实存在,这通过运行 rake db:create 得到确认,我收到“已经存在”消息。

我已经运行了rake db:migrate 和rake:test:prepare,但错误仍然存​​在。

我的测试设置如下

group :test do
  gem 'rspec-rails'
  gem 'factory_girl_rails'
  gem 'capybara'
  gem 'guard-rspec'
  gem 'spork-rails'
  gem 'guard-spork'
end 

开发数据库没有问题。

为什么我得到一个 db does not exist 错误,我可以做些什么来调试它?

【问题讨论】:

  • 尝试使用测试 ENV RAILS_ENV=test rails c 进入控制台。你能做到吗?你能在那里创造记录吗?更多细节:创建测试数据库后,您是否重新启动了 guard/spork?
  • 感谢 gotva。我可以使用RAILS_ENV=test rails c 访问控制台,但是我无法在测试数据库中创建记录。使用开发控制台/数据库,我可以毫无问题地创建记录。顺便说一句,我刚刚删除了我的本地数据库并重新创建并重新迁移了它们。我不知道为什么两个数据库(开发和测试)的行为不同。欣赏更多想法,并乐于提供更多信息

标签: ruby-on-rails rspec capybara factory-bot


【解决方案1】:

尝试先运行这个:

rake db:create

【讨论】:

  • 感谢 gegil,正如我上面所说,rake db:create 给出了“test-db 已存在”消息。
【解决方案2】:

我将添加对我有帮助的解决方案(如果有人遇到此问题)。我不得不跑:

bundle exec rake db:setup

这会重新创建一个数据库并运行任何迁移。

【讨论】:

    【解决方案3】:

    经过多次反复试验,我终于设法让测试数据库正常工作。将以下内容留在这里以防其他人遇到此问题。

    问题是 database.yml 中的用户名不正确(虽然我确实更改了这些值,但我认为这不是原因,因为开发和测试之前都使用相同的用户名)。

    或者在ENV["DATABASE_URL"] = "postgres://localhost/test_db" 其他地方设置的配置变量中的一个小拼写错误。这应该是test-db。

    【讨论】:

    • 有一个错误将旧的 schema.rb 文件留在我的系统上。重命名允许我创建和迁移数据库。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-16
    • 2016-12-30
    • 2019-09-05
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    • 1970-01-01
    相关资源
    最近更新 更多