Не удается получить доступ к переменным среды в базе данных.файл 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 ответа:
обновление: некоторые люди сообщают в комментариях, что это не работает с 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'