fe_sendauth:Ruby没有提供密码(PG :: ConnectionBad),但在Rails中没问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了fe_sendauth:Ruby没有提供密码(PG :: ConnectionBad),但在Rails中没问题相关的知识,希望对你有一定的参考价值。
我从直接红宝石评估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
您没有在ActiveRecord::Base.establish_connection(
中指定用户名和密码。我假设您想在SUPERUSER
数据库中使用一些没有密码的www_development
- 对吧?
根据documentation peer auth的确如此
从操作系统获取客户端的操作系统用户名,并检查它是否与请求的数据库用户名匹配。
这就是为什么如果你可以没有密码psql
,你应该能够运行app.rb
与相同的操作系统用户和环境没有密码。如果你不能,那么app.rb
尝试用不同的用户名连接......
选项:
- 把
username: postgres
放到ActiveRecord::Base.establish_connection(
- 将
local all all peer
改为local all all trust
使用ENV变量作为密码,变量本身很可能不存在。用printenv
确认存在。例如,在将变量包含在/etc/environment
文件中之后,您需要重新登录/重新引导变量才能访问该变量。如果这样做,它可能比改变pg_hba.conf
更好。
以上是关于fe_sendauth:Ruby没有提供密码(PG :: ConnectionBad),但在Rails中没问题的主要内容,如果未能解决你的问题,请参考以下文章
django.db.utils.OperationalError:fe_sendauth:未提供密码
尝试为 ror 应用程序设置 postgres,出现错误 - fe_sendauth:未提供密码