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'] %>
Другие вопросы по тегам