Rails + PostgreSQL + rbenv-vars: fe_sendauth: пароль не указан с использованием переменных среды
Я работаю над проектом Rails, использующим PostgreSQL, и хочу сохранить данные для входа в базу данных в файл и получить к ним доступ с помощью переменных среды, используя rbenv-vars. Я использую Ubuntu 16.10.
Учитывая следующие файлы:
pg_hba.conf
# Database administrative login by Unix domain socket
local all postgres peer
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local replication postgres peer
#host replication postgres 127.0.0.1/32 md5
#host replication postgres ::1/128 md5
database.yml
default: &default
adapter: postgresql
encoding: unicode
host: localhost
pool: 5
username: consul
password: <% ENV['CONSUL_DATABASE_PASSWORD'] %>
.rbenv-вары
SECRET_KEY_BASE=(secret key)
CONSUL_DATABASE_PASSWORD=(database password)
Когда я пытаюсь создать базу данных для проекта, используя rake db:create
Команда я получаю эту ошибку:
fe_sendauth: no password supplied
Я пытался сохранить пароль в открытом тексте, и это работает, но, как вы можете себе представить, я не хочу этого делать.
3 ответа
Измените строку на
password: <%= ENV['CONSUL_DATABASE_PASSWORD'] %>
<% %>
просто оцените содержание, тогда как
<%= %>
оценивает и вставляет содержимое вместо тега
Обратитесь к этому ответу для получения более подробной информации о тегах erb. В чем разница между <%, <% =, <% # и -%> в ERB в Rails?
В моем случае проблема заключалась в том, что в имени переменной окружения были черты, а не подчеркивания, а именно:
<%= ENV['APP-NAME_DATABASE_PASSWORD'] %>
Изменение имени переменной в config/database.yml
в APP_NAME_DATABASE_PASSWORD
исправил это для меня.
fe_sendauth: пароль не указан
<% ENV['CONSUL_DATABASE_PASSWORD'] %>
должно быть
<%= ENV['CONSUL_DATABASE_PASSWORD'] %>