Rails 5:尝试创建和使用新的测试数据库

时间:2019-01-23 12:25:48

标签: ruby-on-rails postgresql testing

我需要创建一个新的测试数据库(postgres),并且遇到了麻烦。看来,当我尝试运行任何测试时,它试图连接到生产数据库,这出于许多原因而令人担忧。这是我当前的database.yml。

test:
  adapter: postgresql
  encoding: unicode
  database: xxxxxx-test
  pool: 5
  username: xxx
  host: localhost

但是当我运行测试时,我看到:

An error occurred while loading ./spec/models/recipe_spec.rb.
Failure/Error: ActiveRecord::Migration.maintain_test_schema!

PG::ConnectionBad:
  FATAL:  no pg_hba.conf entry for host "IP_ADDRESS", user "PRODUCTION_USER", database "PRODUCTION_DATABASE", SSL off

我不确定为什么会这样或我应该如何设置它。

这是我要测试的gemfile:

group :test do
  # Adds support for Capybara system testing and selenium driver
  gem 'capybara', '>= 2.15', '< 4.0'
  gem 'selenium-webdriver'
  # Easy installation and use of chromedriver to run system tests with Chrome
  gem 'chromedriver-helper'
  gem 'rspec-rails', '~> 3.5'
  gem 'database_cleaner'
  gem 'factory_bot_rails'
end

值得注意的是,我目前database_cleaner还没有做任何事情。

1 个答案:

答案 0 :(得分:1)

来自database.yml的数据库配置已与ENV["DATABASE_URL"]合并。但是ENV["DATABASE_URL"] 始终优先于YML配置。请参见Rails guides on configuration

坏消息是您已将ENV["DATABASE_URL"]设置为指向生产数据库,这可能是灾难性的。

好消息是,您似乎在生产数据库上有一个IP白名单,该白名单拒绝了您的本地IP。否则,您将破坏您的生产数据库!

要解决此问题,您需要确定设置ENV["DATABASE_URL"]的位置并将其删除。根据您的设置,此范围可以从~/.profile到docker容器配置。然后确认您具有正确的配置:

$ rails runner -e test "puts ActiveRecord::Base.connection_config"   

这应该打印如下内容:

{"adapter"=>"postgresql", "encoding"=>"unicode", "pool"=>5, "database"=>"xxxxxx-test"}

此时,可以安全地创建用于开发/测试的数据库:

$ rails db:create
$ rails db:schema:load

您可以使用ENV["DATABASE_URL"]来让开发人员使用他们自己的本地配置,但是您应该从不使其指向除实际生产服务器以外的任何产品上的生产数据库!