我需要创建一个新的测试数据库(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
还没有做任何事情。
答案 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"]
来让开发人员使用他们自己的本地配置,但是您应该从不使其指向除实际生产服务器以外的任何产品上的生产数据库!