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?
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"
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
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.
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é
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'] %>