web-dev-qa-db-fra.com

Rails 3.2, FATAL: L'authentification homologue a échoué pour l'utilisateur (PG :: Error)

J'exécute mon développement sous Ubuntu 11.10 et RubyMine

Voici mes paramètres de développement pour le fichier database.yml: que RubyMine a créé pour moi

development:
  adapter: postgresql
  encoding: unicode
  database: mydb_development
  pool: 5
  username: myuser
  password:

lorsque j'essaie d'exécuter l'application, j'obtiens cette erreur ci-dessous. Il semble que je n'ai pas encore créé d'utilisateur "projet", mais comment puis-je créer un utilisateur et lui accorder une base de données dans postgres? Si tel est le problème, quel est l'outil recommandé à utiliser dans Ubuntu pour cette tâche? si ce n'est pas le problème, alors, s'il vous plaît des conseils.

Exiting
/home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:1194:in `initialize': FATAL:  Peer authentication failed for user "project" (PG::Error)
    from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:1194:in `new'
    from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:1194:in `connect'
    from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:329:in `initialize'
    from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:28:in `new'
    from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:28:in `postgresql_connection'
    from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:303:in `new_connection'
    from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:313:in `checkout_new_connection'
    from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:237:in `block (2 levels) in checkout'
    from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:232:in `loop'
    from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:232:in `block in checkout'
    from /home/sam/.rvm/rubies/Ruby-1.9.3-p0/lib/Ruby/1.9.1/monitor.rb:211:in `mon_synchronize'
    from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:229:in `checkout'
    from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:95:in `connection'
    from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:398:in `retrieve_connection'
    from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_specification.rb:168:in `retrieve_connection'
    from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_specification.rb:142:in `connection'
    from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/model_schema.rb:308:in `clear_cache!'
    from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/railtie.rb:91:in `block (2 levels) in <class:Railtie>'
    from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activesupport-3.2.3/lib/active_support/callbacks.rb:418:in `_run__757346023__prepare__404863399__callbacks'
    from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activesupport-3.2.3/lib/active_support/callbacks.rb:405:in `__run_callback'
    from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activesupport-3.2.3/lib/active_support/callbacks.rb:385:in `_run_prepare_callbacks'
    from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activesupport-3.2.3/lib/active_support/callbacks.rb:81:in `run_callbacks'
    from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/actionpack-3.2.3/lib/action_dispatch/middleware/reloader.rb:74:in `prepare!'
    from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/actionpack-3.2.3/lib/action_dispatch/middleware/reloader.rb:48:in `prepare!'
    from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/Rails/application/finisher.rb:47:in `block in <module:Finisher>'
    from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/Rails/initializable.rb:30:in `instance_exec'
    from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/Rails/initializable.rb:30:in `run'
    from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/Rails/initializable.rb:55:in `block in run_initializers'
    from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/Rails/initializable.rb:54:in `each'
    from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/Rails/initializable.rb:54:in `run_initializers'
    from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/Rails/application.rb:136:in `initialize!'
    from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/Rails/railtie/configurable.rb:30:in `method_missing'
    from /home/sam/RubymineProjects/project/config/environment.rb:5:in `<top (required)>'
    from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:251:in `require'
    from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:251:in `block in require'
    from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:236:in `load_dependency'
    from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:251:in `require'
    from /home/sam/RubymineProjects/project/config.ru:4:in `block in <main>'
    from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/rack-1.4.1/lib/rack/builder.rb:51:in `instance_eval'
    from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/rack-1.4.1/lib/rack/builder.rb:51:in `initialize'
    from /home/sam/RubymineProjects/project/config.ru:1:in `new'
    from /home/sam/RubymineProjects/project/config.ru:1:in `<main>'
    from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/rack-1.4.1/lib/rack/builder.rb:40:in `eval'
    from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/rack-1.4.1/lib/rack/builder.rb:40:in `parse_file'
    from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/rack-1.4.1/lib/rack/server.rb:200:in `app'
    from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/Rails/commands/server.rb:46:in `app'
    from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/rack-1.4.1/lib/rack/server.rb:301:in `wrapped_app'
    from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/rack-1.4.1/lib/rack/server.rb:252:in `start'
    from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/Rails/commands/server.rb:70:in `start'
    from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/Rails/commands.rb:55:in `block in <top (required)>'
    from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/Rails/commands.rb:50:in `tap'
    from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/Rails/commands.rb:50:in `<top (required)>'
    from /home/sam/RubymineProjects/project/script/Rails:6:in `require'
    from /home/sam/RubymineProjects/project/script/Rails:6:in `<top (required)>'
    from -e:1:in `load'
    from -e:1:in `<main>'

Process finished with exit code 1
135
simo

Si vous avez installé postresql sur votre serveur, hébergez simplement: localhost to database.yml, je le jette généralement autour de la mention pool: 5. Autrement, si ce n'est pas localhost, indiquez à cette application où trouver sa base de données. 

development:
  adapter: postgresql
  encoding: unicode
  database: kickrstack_development
  Host: localhost
  pool: 5
  username: kickrstack
  password: secret

Assurez-vous que vos informations d'identification d'utilisateur sont correctement définies en créant une base de données et en attribuant la propriété à l'utilisateur de votre application pour établir la connexion. Pour créer un nouvel utilisateur dans postgresql 9, exécutez:

Sudo -u postgres psql

définissez le mot de passe utilisateur postgresql si ce n'est pas le cas, il s'agit simplement d'un mot de passe de barre oblique inversée.

postgres=# \password

Créez un nouvel utilisateur et mot de passe et la nouvelle base de données de l'utilisateur:

postgres=# create user "guy_on_stackoverflow" with password 'keepitonthedl';
postgres=# create database "dcaclab_development" owner "guy_on_stackoverflow"; 

Maintenant, mettez à jour votre fichier database.yml après avoir confirmé la création de la base de données, de l'utilisateur, du mot de passe et défini ces privilèges. N'oubliez pas l'hôte: localhost.

287
Bent Cardan

C'est le moyen le plus infaillible de faire fonctionner votre application Rails avec postgres dans l'environnement de développementsous Ubuntu 13.10. 

1) Créez l'application Rails avec Postgres YAML et 'pg' dans le Gemfile:

$ Rails new my_application -d postgresql

2) Donnez-lui une fonctionnalité CRUD. Si vous ne voyez que si postgres fonctionne, créez un échafaudage:

$ Rails g scaffold cats name:string age:integer colour:string

3) À partir de Rails 4.0.1, l'option -d postgresql génère un YAML qui n'inclut pas de paramètre d'hôte. J'ai trouvé que j'avais besoin de ça. Editez la section de développement et créez les paramètres suivants: 

encoding: UTF-8
Host: localhost
database: my_application_development
username: thisismynewusername
password: thisismynewpassword 

Notez que le paramètre database concerne une base de données qui ne se ferme pas encore, et que username et password sont les informations d'identification d'un rôle qui n'existe pas non plus. Nous les créerons plus tard!

Voici à quoi devrait ressembler config/database.yml (pas de honte en copypast: D):

development:
  adapter: postgresql
  pool: 5
  # these are our new parameters
  encoding: UTF-8
  database: my_application_development
  Host: localhost
  username: thisismynewusername
  password: thisismynewpassword

test:
  # this won't work 
  adapter: postgresql
  encoding: unicode
  database: my_application_test
  pool: 5
  username: my_application
  password:

production:
  # this won't work 
  adapter: postgresql
  encoding: unicode
  database: my_application_production
  pool: 5
  username: my_application
  password:

4) Démarrer le shell postgres avec cette commande:

$ psql

4a) Vous pouvez obtenir cette erreur si votre utilisateur actuel (comme dans votre ordinateur) n’a pas le rôle correspondant dans l’administration postgres.

psql: FATAL:  role "your_username" does not exist

Maintenant, je n’ai installé que postgres une seule fois, j’ai peut-être tort, mais je pense que postgres crée automatiquement un rôle d’administration avec les mêmes informations d’identité que l’utilisateur sur lequel vous avez installé postgres. 

4b) Cela signifie donc que vous devez utiliser l’utilisateur qui a installé postgres pour utiliser la commande psql et démarrer le shell:

$ Sudo su postgres

Et puis courir

$ psql

5) Vous saurez que vous êtes dans le shell postgres car votre terminal ressemblera à ceci:

$ psql
psql (9.1.10)
Type "help" for help.

postgres=# 

6) En utilisant la syntaxe postgresql, créons l'utilisateur que nous avons spécifié dans config/database.yml '/ development section:

postgres=# CREATE ROLE thisismynewusername WITH LOGIN PASSWORD 'thisismynewpassword';

Maintenant, il y a quelques subtilités ici alors allons-y. 

  • Le nom d'utilisateur du rôle, thisismynewusername, n'a pas est entouré de guillemets.
  • Spécifiez le mot clé LOGIN après le AVEC. Sinon, le rôle sera quand même créé, mais il ne pourra pas se connecter à la base de données!
  • Le mot de passe du rôle, thisismynewpassword, doit être entre guillemets simples. Pas de guillemets doubles .
  • Ajouter un point-virgule à la fin;)

Vous devriez voir ceci dans votre terminal:

postgres=#
CREATE ROLE
postgres=#

Cela signifie "ROLE CREATED", mais les alertes de postgres semblent adopter les mêmes conventions impératives de git hub.

7) Maintenant, toujours dans le shell postgres, nous devons créer la base de données avec le nom que nous avons défini dans le YAML. Attribuez à l'utilisateur créé à l'étape 6 son propriétaire:

postgres=# CREATE DATABASE my_application_development OWNER thisismynewusername;

Vous saurez si vous avez réussi car vous obtiendrez le résultat: 

CREATE DATABASE

8) Quittez le shell postgres:

\q

9) Maintenant le moment de vérité:

$ Rails_ENV=development rake db:migrate

Si vous obtenez ceci:

==  CreateCats: migrating =================================================
-- create_table(:cats)
   -> 0.0028s
==  CreateCats: migrated (0.0028s) ========================================

Félicitations, postgres fonctionne parfaitement avec votre application. 

9a) Sur mon ordinateur local, je continuais à avoir une erreur de permission. Je ne m'en souviens pas exactement, mais c'était une erreur dans le sens de

Can't access the files. Change permissions to 666.

Bien que je conseille de réfléchir très soigneusement à la définition récursive de privilèges d'écriture sur une machine de production, localement, j'ai octroyé à l'ensemble de l'application les privilèges d'écriture en lecture suivants: 

9b) Montez d'un niveau de répertoire:

$ cd ..

9c) Définissez les autorisations du répertoire my_application et de tout son contenu sur 666:

$ chmod -R 0666 my_application

9d) Et relancez la migration:

$ Rails_ENV=development rake db:migrate

==  CreateCats: migrating =================================================
-- create_table(:cats)
   -> 0.0028s
==  CreateCats: migrated (0.0028s) ========================================

Quelques trucs et astuces si vous perdez votre temps

Essayez-les avant de redémarrer toutes ces étapes:

L'utilisateur mynewusername ne dispose pas des privilèges permettant à CRUD d'accéder à la base de données my_app_development? Supprimez la base de données et créez-la à nouveau avec mynewusername en tant que propriétaire:

1) Démarrer le shell postgres:

$ psql

2) Supprimez la base de données my_app_development. Faites attention! Drop signifie totalement supprimer!

postgres=# DROP DATABASE my_app_development;

3) Recréez un autre my_app_development et faites de monnewusername le propriétaire:

postgres=# CREATE DATABASE my_application_development OWNER mynewusername;

4) Quittez le shell:

postgres=# \q

L'utilisateur mynewusername ne peut pas se connecter à la base de données? Vous pensez avoir écrit un mauvais mot de passe dans le fichier YAML et vous ne vous souvenez plus du mot de passe que vous avez entré avec le shell postgres? Modifiez simplement le rôle avec le mot de passe YAML:

1) Ouvrez votre YAML et copiez le mot de passe dans votre presse-papiers:

 development:
      adapter: postgresql
      pool: 5
      # these are our new parameters
      encoding: UTF-8
      database: my_application_development
      Host: localhost
      username: thisismynewusername
      password: musthavebeenverydrunkwheniwrotethis

2) Démarrer le shell postgres:

$ psql    

3) Mettez à jour le mot de passe de mynewusername. Collez le mot de passe et n'oubliez pas de le mettre entre guillemets:

postgres=# ALTER ROLE mynewusername PASSWORD `musthavebeenverydrunkwheniwrotethis`;

4) Quittez le shell:

postgres=# \q

Vous essayez de vous connecter à localhost via un visualiseur de base de données tel que Dbeaver, et vous ne savez pas quel est le mot de passe de votre utilisateur postgres? Changez-le comme ça:

1) Exécutez passwd en tant que superutilisateur:

$ Sudo passwd postgres

2) Entrez le mot de passe de votre compte pour Sudo (rien à voir avec postgres):

[Sudo] password for starkers: myaccountpassword

3) Créez le nouveau mot de passe du compte postgres:

Enter new UNIX password: databasesarefun
Retype new UNIX password: databasesarefun
passwd: password updated successfully

Vous obtenez ce message d'erreur ?:

Run `$ bin/rake db:create db:migrate` to create your database
$ rake db:create db:migrate
PG::InsufficientPrivilege: ERROR:  permission denied to create database

4) Vous devez donner à votre utilisateur la possibilité de créer des bases de données. Depuis le shell psql:

ALTER ROLE thisismynewusername WITH CREATEDB
52
Starkers

Pour solution permanente: 

Le problème est avec votre pg_hba. Cette ligne:

local   all             postgres                                peer

Devrait être

local   all             postgres                                md5

Redémarrez ensuite votre serveur postgresql après avoir modifié ce fichier. 

Si vous êtes sur Linux, la commande serait 

Sudo service postgresql restart
29
Sumit Munot

J'étais confronté au même problème sur la machine Ubuntu, j'ai donc supprimé cette erreur en suivant certaines étapes. Basculer vers l'utilisateur postgres

$ Sudo su - postgres 

il vous demandera un mot de passe et le mot de passe par défaut est postgres

Après avoir basculé l'utilisateur sur postgres, ouvrez la console psql

$ psql

alors vérifiez la version de postgres si plusieurs versions sont disponibles

psql=# select VERSION();

PostgreSQL 9.1.13 on x86_64-unk....         # so version is 9.1

Maintenant ouvert postgres user

vim /etc/postgresql/9.1/main/pg_hba.conf 

9.1 est la version supérieure du formulaire de commande

et remplacer

local   all             postgres                                peer

à

local   all             postgres                                md5

Sudo service postgresql restart

J'écris aussi des étapes sur mon blog

http://tarungarg402.blogspot.in/2014/10/set-up-postgresql-on-ubuntu.html

9
Tarun Garg

Vous pouvez aller dans votre fichier /var/lib/pgsql/data/pg_hba.conf et ajouter la confiance à la place de Ident Cela a fonctionné pour moi. 

local   all all trust
Host    all 127.0.0.1/32    trust

Pour plus de détails, reportez-vous à ce problème L’authentification d’identité a échoué pour l’utilisateur

5
Rastee

Ajouter "Host: locahost" était la magie pour moi

development:
adapter: postgresql
database: database_name_here
Host: localhost
username: user_name_here
1
ispirett

Si vous recevez ce message d'erreur (Peer authentication failed for user (PG::Error)) lors de l'exécution de tests unitaires, assurez-vous que la base de données de test existe.

0
David Winiecki