web-dev-qa-db-fra.com

PG :: ConnectionBad: fe_sendauth: aucun mot de passe fourni

Lorsque je tente d'exécuter "rake test" sur une base de données postgres locale, l'exception ci-dessus est levée.

Voici mon fichier pg_hba.conf: # Connexion administrative à la base de données par socket de domaine Unix locale tout homologue 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

et voici la section pertinente de mon database.yml

test:

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

Dans le fichier database.yml réel, "nom d'utilisateur" est remplacé par mon nom d'utilisateur actuel sous lequel je suis connecté. Étant donné que la méthode d'authentification est définie comme "homologue", aucun mot de passe ne devrait être requis.

J'ai également pris soin de redémarrer Postgres

Sudo -u postgres pg_ctlcluster 9.3 main restart

Qu'est-ce qui me manque ici?

41
Lawrence I. Siden

localhost en tant qu'hôte fait référence à une connexion TCP, ce qui signifie que la méthode d'authentification est md5 _ (mot de passe requis) selon votre pg_hba.conf:

 # Connexions locales IPv4: 
 Tout héberger tous 127.0.0.1/32 md5 
 # Connexions locales IPv6: 
 Tout héberger tous: 1/128 md5 

Pour que la méthode peer soit utilisée, vous devez vous connecter via des sockets de domaine Unix, et comme vous semblez utiliser un système d’exploitation de type Debian, cela signifie mettre /var/run/postgresql dans le champ Host, ou rien du tout (c’est la valeur par défaut sauf si les variables d’environnement disent le contraire).

EDIT: si vous utilisez des URI de base de données (pris en charge depuis Rails-4.1, comme annoncé dans http://weblog.rubyonrails.org/2014/4/8/Rails-4-1/ ), la syntaxe pourrait être:

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

  • pour le domaine de socket Unix par défaut (champ hôte vide):
    test: "postgresql:///myapp_test"

27
Daniel Vérité

Changez le code comme ci-dessous et ça marchera

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

Ci-dessous son explication:

confiance

Autoriser la connexion sans condition. Cette méthode permet à toute personne pouvant se connecter au serveur de base de données PostgreSQL de se connecter comme n'importe quel utilisateur de PostgreSQL de son choix, sans avoir besoin d'un mot de passe ou de toute autre authentification.

md5

Demander au client de fournir un mot de passe à double hachage MD5 pour l'authentification.

se référer pour plus ici

19
Ravistm

Si votre hb_conf a déjà été modifié pour forcer les mots de passe, assurez-vous que la configuration de la base de données de votre Rails application comprend un mot de passe dans les environnements de développement et de test.

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

J'obtenais cette erreur lorsque je n'ai pas réussi à fournir un mot de passe pour la base de données de test.

8
s2t2

J'utilise Postgres App. Ce qui est vraiment génial, car vous n'avez pas à fournir le nom d'utilisateur et le mot de passe dans la partie par défaut du fichier database.yml

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

Mon problème : J'ai changé le chemin et je n'ai pas réussi à faire fonctionner Postgres.

Solution : utilisez le documentation pour:

1) Désinstaller l'application

2) Arrêtez le processus postgres en utilisant ceci answer , qui dit d'utiliser Sudo pkill -u postgres

3) réinstallez et démarrez l'application

Tout devrait bien fonctionner maintenant, passez une bonne journée!

Remarque : cette opération résout également le problème port 5432 de Postgres.app utilisé

0
Jose Paez

J'ai rencontré cette question aussi. J'ai vérifié la configuration de ma base de données, /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'] %>

J'ai trouvé le dernier paragraphe est faux, le bon code est

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

0
hofffman