简体   繁体   English

PG::ConnectionBad: fe_sendauth: 未提供密码

[英]PG::ConnectionBad: fe_sendauth: no password supplied

When I attempt to run "rake test" on a local postgres database, it throws the above exception.当我尝试在本地 postgres 数据库上运行“rake test”时,它会引发上述异常。

Here is my pg_hba.conf file: # Database administrative login by Unix domain socket local all postgres peer这是我的 pg_hba.conf 文件: # Unix domain socket local all postgres peer的数据库管理登录

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             username                                  peer
local   myapp_dev   myapp                               md5
local   myapp_test  myapp                               md5
local   myapp_prod  myapp                               md5
#local   all             all                                     peer
# 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

and here is the relevant section from my database.yml这是我的 database.yml 中的相关部分

test:

adapter: postgresql
database: myapp_test
pool: 5
timeout: 5000
host: localhost
username: username
password:

In the real database.yml, 'username' is replaced with my actual user name that I am logged in as.在真实的 database.yml 中,“用户名”被替换为我登录时使用的实际用户名。 Since the authentication method is defined as 'peer', no password should be required.由于身份验证方法被定义为“对等”,因此不需要密码。

I have also taken care to restart Postgres我还注意重新启动 Postgres

sudo -u postgres pg_ctlcluster 9.3 main restart

What else am I missing here?我在这里还缺少什么?

localhost as a host refers to a TCP connection, which means the auth method is md5 (password required) per your pg_hba.conf : localhost作为主机是指 TCP 连接,这意味着根据您的pg_hba.conf验证方法是md5 (需要密码):

# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

For the peer method to be taken, you'd need to connect through Unix domain sockets, and since you seem to be using a debian-like OS, that means putting /var/run/postgresql in the host field, or nothing at all (it's the default unless environment variables say otherwise).要采用peer方法,您需要通过 Unix 域套接字进行连接,并且由于您似乎使用的是类似 debian 的操作系统,这意味着将/var/run/postgresql放在host字段中,或者根本没有(除非环境变量另有说明,否则这是默认设置)。

EDIT: if using database URIs (supported since Rails-4.1, as announced in http://weblog.rubyonrails.org/2014/4/8/Rails-4-1/ ), the syntax could be:编辑:如果使用数据库 URI(自 Rails-4.1 起支持,如http://weblog.rubyonrails.org/2014/4/8/Rails-4-1/中所述),语法可能是:

  • for localhost:对于本地主机:
    test: "postgresql://localhost/myapp_test"

  • for the default Unix socket domain (host field left empty):对于默认的 Unix 套接字域(主机字段留空):
    test: "postgresql:///myapp_test"

Change the code as below and it will work如下更改代码,它将起作用

pg_hba.conf:
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust

Below its explanation:下面是它的解释:

trust相信

Allow the connection unconditionally.无条件允许连接。 This method allows anyone that can connect to the PostgreSQL database server to login as any PostgreSQL user they wish, without the need for a password or any other authentication.此方法允许任何可以连接到 PostgreSQL 数据库服务器的人以他们希望的任何 PostgreSQL 用户身份登录,而无需密码或任何其他身份验证。

md5 md5

Require the client to supply a double-MD5-hashed password for authentication.要求客户端提供双 MD5 哈希密码进行身份验证。

refer for more here参考这里更多

If your hb_conf has already been modified to force passwords, then make sure your rails app's database configuration includes a password in both development and test environments.如果您的 hb_conf 已被修改为强制输入密码,请确保您的 rails 应用程序的数据库配置在开发和测试环境中都包含密码。

default: &default
  adapter: postgresql
  encoding: unicode
  pool: 5
  host: localhost
  username: your_user
  password: your_password

development:
  <<: *default
  database: your_db_development

test:
  <<: *default
  database: your_db_test

production:
  url: <%= ENV['DATABASE_URL'] %>

I was getting this error when I failed to supply a password for the test database.当我未能为测试数据库提供密码时,我收到了这个错误。

I met this question, too.我也遇到过这个问题。 I checked my database config, /var/www/myproject/shared/config/database.yml :我检查了我的数据库配置/var/www/myproject/shared/config/database.yml

production: 
adapter: postgresql 
pool: 5 
timeout: 5000 
encoding: utf8 
host: localhost 
database: myproject
username: myname 
password: <%= ENV['name_DATABASE_PASSWORD'] %>

I found the last paragraph is wrong, the right code is我发现最后一段是错误的,正确的代码是

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

I use Postgres App.我使用 Postgres 应用程序。 Which is really great because you don't have to supply username and password in the default part of the database.yml这真的很棒,因为您不必在 database.yml 的默认部分提供用户名和密码

database.yml数据库.yml

default: &default
  adapter: postgresql
  encoding: unicode
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

development:
  <<: *default
  database: my-app_development

test:
  <<: *default
  database: my-app_test

production:
  <<: *default
  database: my-app_production
  username: my-app
  password: <%= ENV['MY-APP_DATABASE_PASSWORD'] %>

My problem : I changed the path and wasn't able to get postgres to work.我的问题:我改变了路径,无法让 postgres 工作。

Solution : use the documentation to:解决方案:使用文档

1) Uninstall the app 1)卸载应用程序

2) Stop the postgres process using this answer , which says to use sudo pkill -u postgres 2)使用这个答案停止postgres进程,它说使用sudo pkill -u postgres

3) Reinstall and start the app 3)重新安装并启动应用程序

Everything should work fine now, have a great day!现在一切都应该正常了,祝你有美好的一天!

Note : Doing this also solves the problem Postgres.app port 5432 in use注意:这样做也解决了Postgres.app port 5432 in use的问题

I had this problem, solved by a coworker: You need to set a local user and password in postgres我遇到了这个问题,由同事解决:您需要在 postgres 中设置本地用户和密码

createuser --interactive --pwprompt

It will ask you for the name of the role (the user) and the password you want to have.它将询问您角色(用户)的名称和您想要拥有的密码。

Then you have to add this username and password to your database.yml file然后您必须将此用户名和密码添加到您的 database.yml 文件中

rename method from peer to trust in /etc/postgresql/<postgres-version>/main/pg_hba.conf file./etc/postgresql/<postgres-version>/main/pg_hba.conf文件中将方法从peer重命名为trust

# Database administrative login by Unix domain socket
local   all             postgres                                trust

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     trust
host    replication     all             127.0.0.1/32            trust
host    replication     all             ::1/128                 trust

initialize dot environment in your project在您的项目中初始化 dot 环境

   # dot gem
 gem 'dotenv-rails', groups: [:development, :test]

than bundle installbundle install

and than make a .env file in your project and add the following line然后在您的项目中创建一个 .env 文件并添加以下行

POSTGRES_HOST=localhost
POSTGRES_USER= user_name
POSTGRES_PASSWORD= your_password
RAILS_MAX_THREADS=5

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 PG :: ConnectionBad fe_sendauth:未提供密码 - PG::ConnectionBad fe_sendauth: no password supplied 耙终止:PG :: ConnectionBad:fe_sendauth:未提供密码 - rake aborted:PG::ConnectionBad: fe_sendauth: no password supplied 修复方法:PG :: ConnectionBad:fe_sendauth:未提供密码 - how to fix: PG::ConnectionBad: fe_sendauth: no password supplied Rails / PostgreSQL问题:PG :: ConnectionBad:fe_sendauth:未提供密码 - Rails/PostgreSQL problem: PG::ConnectionBad: fe_sendauth: no password supplied &#39;initialize&#39;:fe_sendauth:不提供密码(PG :: ConnectionBad) - `initialize': fe_sendauth: no password supplied (PG::ConnectionBad) 耙子流产了! PG :: ConnectionBad:fe_sendauth:没有提供密码 - rake aborted! PG::ConnectionBad: fe_sendauth: no password supplied capistrano,rails,PG :: ConnectionBad:fe_sendauth:没有提供密码 - capistrano, rails, PG::ConnectionBad: fe_sendauth: no password supplied Rails 控制台导致 PG::ConnectionBad: fe_sendauth: 没有提供密码 - Rails Console results in PG::ConnectionBad: fe_sendauth: no password supplied fe_sendauth:未提供密码 (PG::ConnectionBad) Docker 容器 - fe_sendauth: no password supplied (PG::ConnectionBad) Docker container pg_restore后,报错; PG::ConnectionBad fe_sendauth:未提供密码 - After pg_restore, an error; PG::ConnectionBad fe_sendauth: no password supplied
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM