#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 может их видеть