Не удается получить доступ к переменным среды в базе данных.файл YML`


у меня есть следующий раздел развития моего development.yml file:

development:
  adapter: postgresql
  host: localhost
  database: testtb
  username: app_user
  password: ENV['APP_USER_POSTGRES_PASSWORD']     <= Troublesome line

когда я открываю консоль rails через bundle exec rails console и типа ENV['APP_USER_POSTGRES_PASSWORD'] Я возвращаю пароль БД, который я указал в своем локальном профиле. Однако, когда я запускаю свой сервер rails, он не может подключиться к БД, не удается с

PGError FATAL:  password authentication failed for user "app_user"

это ранее работало, когда у меня был пароль БД на самом деле напечатан в обычном тексте, а не пытаться получить к нему доступ через ENV['...'], но по понятным причинам я хочу чтобы сохранить фактический пароль из этого файла полностью (и, следовательно, из репозитория кода) , все еще имея возможность совершать другие, небезопасные изменения в .

есть ли что-то особенное в синтаксисе, который мне не хватает, или переменные среды по какой-то причине недоступны, когда database.yml файл загружается?

2 62

2 ответа:

обновление: некоторые люди сообщают в комментариях, что это не работает с Rails 4.2.x. x. я сам не пробовал, так что YMMV.


Ах, наконец - то придумал простое решение-он принимает встроенный Ruby:

password: <%= ENV['APP_USER_POSTGRES_PASSWORD'] %>

короткое и быстрое решение если вы используете более новую версию рельсы! Выполните следующую команду:

spring stop

..тогда беги rails console или другая команда рельсов. Моя проблема заключалась в том, что Spring server необходимо было перезапустить, чтобы обновить/забрать мои новые ENV vars. Я запускал консоль Rails, и она не могла их видеть, пока я не выключил Spring.

предыдущие версии Rails не имели этой проблемы, так как они не использовали Spring server.

еще один инструмент, чтобы помочь устранение неполадок -- используйте следующую команду для печати базы данных.YML в файл config. Вы можете запустить его из командной строки, но я предпочитаю запускать это в консоли Rails, так как тогда вы можете использовать awesome_print, чтобы сделать его красивым:

внутри rails console:

puts ActiveRecord::Base.configurations

...или с помощью awesome_print

ap ActiveRecord::Base.configurations

или вместо этого из командной строки:

bin/rails runner 'puts ActiveRecord::Base.configurations'