Я использую docker-compose
для создания двух сервисов для моего приложения на Rails:
web
- собственно Rails / веб-приложение db
- A postgresконтейнер, работающий с postgres 11.5
Я использую обе службы локально с RAILS_ENV=development
.
В качестве однократного ручного шага я хочу: Самый первый раз, когда я пытаюсь запустить rake db:create
для создания базы данных. Тем не менее, я получаю сообщение об ошибке postgres:
docker-compose up --build --no-start
docker-compose run --rm web bundle exec rake db:create
RAILS_ENV=development bundle exec rake db:create
Created database 'feeder_development'
could not connect to server: Connection refused
Is the server running on host "localhost" (127.0.0.1) and accepting
TCP/IP connections on port 5432?
could not connect to server: Cannot assign requested address
Is the server running on host "localhost" (::1) and accepting
TCP/IP connections on port 5432?
Couldn't create 'feeder_test' database. Please check your configuration.
rake aborted!
PG::ConnectionBad: could not connect to server: Connection refused
Is the server running on host "localhost" (127.0.0.1) and accepting
TCP/IP connections on port 5432?
could not connect to server: Cannot assign requested address
Is the server running on host "localhost" (::1) and accepting
TCP/IP connections on port 5432?
/app/vendor/bundle/ruby/2.5.0/gems/pg-0.18.4/lib/pg.rb:45:in `initialize'
/app/vendor/bundle/ruby/2.5.0/gems/pg-0.18.4/lib/pg.rb:45:in `new'
/app/vendor/bundle/ruby/2.5.0/gems/pg-0.18.4/lib/pg.rb:45:in `connect'
/app/vendor/bundle/ruby/2.5.0/gems/activerecord-5.2.2/lib/active_record/connection_adapters/postgresql_adapter.rb:692:in `connect'
/app/vendor/bundle/ruby/2.5.0/gems/activerecord-5.2.2/lib/active_record/connection_adapters/postgresql_adapter.rb:223:in `initialize'
/app/vendor/bundle/ruby/2.5.0/gems/activerecord-5.2.2/lib/active_record/connection_adapters/postgresql_adapter.rb:48:in `new'
/app/vendor/bundle/ruby/2.5.0/gems/activerecord-5.2.2/lib/active_record/connection_adapters/postgresql_adapter.rb:48:in `postgresql_connection'
/app/vendor/bundle/ruby/2.5.0/gems/activerecord-5.2.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:811:in `new_connection'
Как вы можете видеть, он успешно создал базу данных development
, но не удалось при создании test
база данных
(задачи db:create
автоматически создают базы данных test
и development
вместе, даже когда среда development
)
Вот мой database.yml
.
default: &default
adapter: postgresql
encoding: utf8
host: localhost
min_messages: warning
pool: 5
timeout: 5000
test:
<<: *default
database: feeder_test
development:
<<: *default
database: feeder_development
Согласно руководствам Rails , вы можете переопределить вышеуказанный конфиг, указав DATABASE_URL
, который я установил как:
DATABASE_URL=postgres://feeder:password123@db/
что я могу сказать -
Rails объединяет информацию DATABASE_URL
с информацией database.yml
при попытке создать базу данных development
. Все хорошо.
Rails НЕ учитывает DATABASE_URL
при создании базы данных test
. Он использует ТОЛЬКО информацию database.yml
, поэтому ищет соединение psql на localhost
.
Так что - есть ли способ заставить Rails уважать мою DATABASE_URL
ENV в среде test
?