Pregunta PG :: ConnectionBad: fe_sendauth: sin contraseña


Cuando intento ejecutar "rake test" en una base de datos local de postgres, arroja la excepción anterior.

Aquí está mi archivo pg_hba.conf:     # Inicio de sesión administrativo de base de datos por socket de dominio Unix     local todos los pares postgres

# 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

y aquí está la sección relevante de mi database.yml

test:

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

En la base de datos real.yml, 'nombre de usuario' se reemplaza con mi nombre de usuario real con el que estoy conectado. Dado que el método de autenticación se define como 'peer', no se requiere contraseña.

También me he tomado la precaución de reiniciar Postgres

sudo -u postgres pg_ctlcluster 9.3 main restart

¿Qué más me echo de menos aquí?


32
2018-04-29 21:35


origen


Respuestas:


localhost como un host se refiere a una conexión TCP, lo que significa que el método de autenticación es md5 (contraseña requerida) por su pg_hba.conf:

# Conexiones locales IPv4:
alojar todos los 127.0.0.1/32 md5
# Conexiones locales IPv6:
alojar todo :: 1/128 md5

Para el peer método que debe tomarse, debe conectarse a través de sockets de dominio Unix, y dado que parece estar usando un sistema operativo similar a Debian, eso significa poner /var/run/postgresql en el host campo, o nada en absoluto (es el valor predeterminado a menos que las variables de entorno digan lo contrario).

EDITAR: si usa URIs de base de datos (soportados desde Rails-4.1, como se anunció en http://weblog.rubyonrails.org/2014/4/8/Rails-4-1/), la sintaxis podría ser:

  • para localhost:
    test: "postgresql://localhost/myapp_test"

  • para el dominio de socket predeterminado de Unix (campo de host dejado vacío):
    test: "postgresql:///myapp_test"


23
2018-04-30 00:27



Cambie el código de la siguiente manera y funcionará

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

Debajo de su explicación:

confianza

Permitir la conexión incondicionalmente. Este método permite a cualquiera que   puede conectarse al servidor de base de datos PostgreSQL para iniciar sesión como cualquier   Usuario de PostgreSQL que desean, sin la necesidad de una contraseña o cualquier   otra autenticación.

md5

Requerir que el cliente proporcione una contraseña doble hash MD5 para   autenticación.

consulte para obtener más información aquí


10
2018-04-25 04:05



Si su hb_conf ya ha sido modificado para forzar las contraseñas, asegúrese de que la configuración de la base de datos de la aplicación de sus rieles incluya una contraseña tanto en entornos de desarrollo como de prueba.

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'] %>

Recibí este error cuando no proporcioné una contraseña para la base de datos de prueba.


5
2018-05-20 20:11



Me encontré con esta pregunta, también. Revisé la configuración de mi base de datos, /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'] %>

Encontré que el último párrafo es incorrecto, el código correcto es

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


0
2017-07-02 10:28