Команды Rake, работающие с несколькими rails_env, не учитывают DATABASE_URL

#ruby-on-rails #ruby #postgresql #environment-variables

#ruby-on-rails #ruby #postgresql #переменные среды

Вопрос:

У меня есть приложение rails, запущенное в контейнере docker, и все довольно стандартно.

У меня есть файл .env, который устанавливает, среди прочего, DATABASE_URL значение postgresql://postgres@db

Приложение загрузится и будет взаимодействовать с базой данных в обычном режиме, но при настройке пользователям необходимо запускать задачи db:setup rake с явными средами, в противном случае следует только разработка DATABASE_URL .

Например, при запуске будут выдаваться ошибки об отсутствии тестовой базы данных на обоих шагах и . rake db:setup db:create db:seed Запуск rake db:setup RAILS_ENV=development amp;amp; rake db:setup RAILS_ENV=test , однако, работает безупречно.

Кроме того, выполнение ActiveRecord::Base.configurations показывает следующее:

 {
  'default'     => {
    'adapter' => 'postgresql',
    'pool'    => 5,
    'timeout' => 5000
  },
  'development' => { 'adapter'  => 'postgresql',
                     'pool'     => 5,
                     'timeout'  => 5000,
                     'database' => 'xxxxxx_development',
                     'username' => 'postgres',
                     'host'     => 'db' },
  'test'        => { 'adapter'  => 'postgresql',
                     'pool'     => 5,
                     'timeout'  => 5000,
                     'database' => 'xxxxxx_test' },
  'production'  => { 'adapter'  => 'postgresql',
                     'pool'     => 5,
                     'timeout'  => 5000,
                     'database' => 'xxxxxx_production' }
}
 

Вы можете видеть, что development это подняло host значение, но ни одна другая среда этого не сделала.

Это что-то с моей стороны или ошибка в rails?

Комментарии:

1. я полагаю, у вас также есть database.yml? знаете ли вы о том, как rails обрабатывает настройки, когда присутствуют оба? edgeguides.rubyonrails.org /…

2. Да, у меня есть database.yml, и я полагаюсь на слияние между ними, как описано в этом руководстве. Слияние работает для любого значения RAILS_ENV (т. Е. Имя базы данных задано правильно), но не для вторичных rails env, подобных тем, которые вызываются db:setup . Они полностью соответствуют их конфигурациям yml

3. как переменные .env подвергаются воздействию среды при запуске rake?

4. Docker-compose с помощью команды env_file . Переменные отображаются внутри контейнера, когда я проверяю его с помощью bash или аналогичных команд, и ruby ENV может их видеть