fe_sendauth:Ruby没有提供密码(PG :: ConnectionBad),但在Rails中没问题

问题描述 投票:2回答:2

我从直接红宝石评估postgres数据库时遇到问题。

我使用Rails创建了一个Postgres数据库

>rails new www --database=postgresql

使用Rails 4.2.5和Postgres是9.4

它生成以下config / database.yml文件。

default: &default
  adapter: postgresql
  encoding: unicode
  pool: 5

development:
  <<: *default
  database: www_development

test:
  <<: *default
  database: www_test

production:
  <<: *default
  database: www_production
  username: www
  password: <%= ENV['WWW_DATABASE_PASSWORD'] %>

我可以运行rails server,db:drop,db:create和db:migrate fine。

我也可以使用psql访问数据库

>psql www_development

但是当我从非Rails项目目录运行以下app.rb时,我得到一个fe_sendauth:没有提供密码(PG :: ConnectionBad)错误消息。

这显然不是Rails问题。我要么错过了我的ruby中的东西,要么Postgres需要一个tweek来处理Rails和纯Ruby之间的一些区别[我不知道关闭]。我还包括了Postgres的pg_hba.conf文件。

在智慧结束时试图弄清楚这个。任何帮助将非常感激。

app.rb

require 'yaml'
require 'active_record'
require 'pg'

ActiveRecord::Base.establish_connection(
  adapter:  'postgresql',
  host:     'localhost',
  database: 'www_development',
)

/etc/PostgreSQL/9.4/卖弄/苹果_好吧.conf

# TYPE  DATABASE        USER            ADDRESS                 METHOD

local   all             postgres                                peer
local   all             all                                     peer
host    all             all             127.0.0.1/32            md5
host    all             all             ::1/128                 md5
ruby postgresql activerecord pg-hba.conf
2个回答
1
投票

您没有在ActiveRecord::Base.establish_connection(中指定用户名和密码。我假设您想在SUPERUSER数据库中使用一些没有密码的www_development - 对吧?

根据documentation peer auth的确如此

从操作系统获取客户端的操作系统用户名,并检查它是否与请求的数据库用户名匹配。

这就是为什么如果你可以没有密码psql,你应该能够运行app.rb与相同的操作系统用户和环境没有密码。如果你不能,那么app.rb尝试用不同的用户名连接......

选项:

  1. username: postgres放到ActiveRecord::Base.establish_connection(
  2. local all all peer改为local all all trust

0
投票

使用ENV变量作为密码,变量本身很可能不存在。用printenv确认存在。例如,在将变量包含在/etc/environment文件中之后,您需要重新登录/重新引导变量才能访问该变量。如果这样做,它可能比改变pg_hba.conf更好。

© www.soinside.com 2019 - 2024. All rights reserved.