Rails 5: Попытка создать и использовать новую тестовую базу данных - PullRequest
0 голосов
/ 23 января 2019

Мне нужно создать новую тестовую базу данных (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

Я не уверен, почему это происходит или как я должен это настроить.

Вот мой гемфайл для теста:

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 голосов
/ 24 января 2019

Конфигурация базы данных с database.yml объединяется с ENV["DATABASE_URL"].Но ENV["DATABASE_URL"] ВСЕГДА имеет приоритет над конфигурацией YML.См. Руководства Rails по настройке .

Плохая новость заключается в том, что вы установили ENV["DATABASE_URL"] для указания на производственную базу данных, которая могла бы привести к катастрофическим последствиям.

Хорошоновость заключается в том, что у вас, похоже, есть белый список IP-адресов в рабочей БД, который запрещает ваш локальный IP.В противном случае вы бы забили свою производственную базу данных!

Чтобы это исправить, вам нужно определить, где находится ENV["DATABASE_URL"], и избавиться от нее.В зависимости от вашей настройки это может быть где угодно от ~/.profile до конфигурации контейнера докера.Затем подтвердите, что у вас есть правильная конфигурация:

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

Это должно напечатать что-то вроде:

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

На данный момент безопасно создавать базы данных для dev / test с помощью:

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

Вы можете использовать ENV["DATABASE_URL"], чтобы позволить разработчикам использовать их собственную локальную конфигурацию, но вы должны НИКОГДА не позволять указывать на производственную БД на чем-либо, кроме реального производственного сервера!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...