1

我正在开发一个使用 PostgreSQL 的 Rails 项目,我想将数据库登录详细信息存储在一个文件中,并使用 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

数据库.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

我尝试以明文形式存储密码并且它可以工作,但正如您可以想象的那样,我不想这样做。

4

3 回答 3

0

将行更改为

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

<% %>只评估内容,而

<%= %>评估并在标签的位置插入内容

有关 erb 标签的更多详细信息,请参阅此答案Rails 中 ERB 中的 <%、<%=、<%# 和 -%> 有什么区别?

于 2017-07-04T07:01:55.527 回答
0

就我而言,问题是我的环境变量名称中有破折号而不是下划线,即:

<%= ENV['APP-NAME_DATABASE_PASSWORD'] %>

更改变量名称config/database.yml以为APP_NAME_DATABASE_PASSWORD我修复它。

于 2018-04-02T10:40:48.247 回答
0

fe_sendauth:未提供密码

<% ENV['CONSUL_DATABASE_PASSWORD'] %>

应该

<%= ENV['CONSUL_DATABASE_PASSWORD'] %>
于 2017-07-04T07:01:34.793 回答