154 votes

Rails 3.2, FATAL : Échec de l’authentification d’homologue pour l’utilisateur (PG::Error)

Je suis en cours d'exécution de mon développement sur Ubuntu 11.10, et RubyMine

Voici mes paramètres de développement de la base de données.yml: qui RubyMine créé pour moi

development:
  adapter: postgresql
  encoding: unicode
  database: dcaclab_development
  pool: 5
  username: dcaclab
  password:

quand j'essaye d'exécuter l'application, j'obtiens cette erreur ci-dessous, il semble que je n'ai pas de créer un "dcaclab' utilisateur, mais, comment puis-je créer un utilisateur et de lui accorder une base de données postgres ? si c'est le problème, alors, qu'est-ce que l'outil recommandé pour une utilisation dans Ubuntu pour cette tâche ? si ce n'est pas le problème, alors, s'il vous plaît conseils.

Exiting
/home/sam/.rvm/gems/ruby-1.9.3-p0@dcaclab/gems/activerecord-3.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:1194:in `initialize': FATAL:  Peer authentication failed for user "dcaclab" (PG::Error)
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@dcaclab/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@dcaclab/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@dcaclab/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@dcaclab/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@dcaclab/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@dcaclab/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@dcaclab/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@dcaclab/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@dcaclab/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@dcaclab/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@dcaclab/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@dcaclab/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@dcaclab/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@dcaclab/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@dcaclab/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@dcaclab/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@dcaclab/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@dcaclab/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@dcaclab/gems/activesupport-3.2.3/lib/active_support/callbacks.rb:405:in `__run_callback'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@dcaclab/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@dcaclab/gems/activesupport-3.2.3/lib/active_support/callbacks.rb:81:in `run_callbacks'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@dcaclab/gems/actionpack-3.2.3/lib/action_dispatch/middleware/reloader.rb:74:in `prepare!'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@dcaclab/gems/actionpack-3.2.3/lib/action_dispatch/middleware/reloader.rb:48:in `prepare!'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@dcaclab/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@dcaclab/gems/railties-3.2.3/lib/rails/initializable.rb:30:in `instance_exec'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@dcaclab/gems/railties-3.2.3/lib/rails/initializable.rb:30:in `run'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@dcaclab/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@dcaclab/gems/railties-3.2.3/lib/rails/initializable.rb:54:in `each'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@dcaclab/gems/railties-3.2.3/lib/rails/initializable.rb:54:in `run_initializers'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@dcaclab/gems/railties-3.2.3/lib/rails/application.rb:136:in `initialize!'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@dcaclab/gems/railties-3.2.3/lib/rails/railtie/configurable.rb:30:in `method_missing'
    from /home/sam/RubymineProjects/dcaclab/config/environment.rb:5:in `<top (required)>'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@dcaclab/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:251:in `require'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@dcaclab/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@dcaclab/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:236:in `load_dependency'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@dcaclab/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:251:in `require'
    from /home/sam/RubymineProjects/dcaclab/config.ru:4:in `block in <main>'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@dcaclab/gems/rack-1.4.1/lib/rack/builder.rb:51:in `instance_eval'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@dcaclab/gems/rack-1.4.1/lib/rack/builder.rb:51:in `initialize'
    from /home/sam/RubymineProjects/dcaclab/config.ru:1:in `new'
    from /home/sam/RubymineProjects/dcaclab/config.ru:1:in `<main>'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@dcaclab/gems/rack-1.4.1/lib/rack/builder.rb:40:in `eval'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@dcaclab/gems/rack-1.4.1/lib/rack/builder.rb:40:in `parse_file'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@dcaclab/gems/rack-1.4.1/lib/rack/server.rb:200:in `app'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@dcaclab/gems/railties-3.2.3/lib/rails/commands/server.rb:46:in `app'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@dcaclab/gems/rack-1.4.1/lib/rack/server.rb:301:in `wrapped_app'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@dcaclab/gems/rack-1.4.1/lib/rack/server.rb:252:in `start'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@dcaclab/gems/railties-3.2.3/lib/rails/commands/server.rb:70:in `start'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@dcaclab/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@dcaclab/gems/railties-3.2.3/lib/rails/commands.rb:50:in `tap'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@dcaclab/gems/railties-3.2.3/lib/rails/commands.rb:50:in `<top (required)>'
    from /home/sam/RubymineProjects/dcaclab/script/rails:6:in `require'
    from /home/sam/RubymineProjects/dcaclab/script/rails:6:in `<top (required)>'
    from -e:1:in `load'
    from -e:1:in `<main>'

Process finished with exit code 1

338voto

Bent Cardan Points 1935

Si vous avez installé postresql sur votre serveur, puis il suffit de l'hôte: localhost à la base de données.yml, j'ai l'habitude de le jeter dans autour de l'endroit où il est dit de la piscine: 5. Sinon, si ce n'est pas localhost définitivement dire que l'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 par la création d'une base de données et l'attribution de propriété de votre application utilisateur pour établir la connexion. Pour créer un nouvel utilisateur dans postgresql 9 exécutez:

sudo -u postgres psql

définir l'utilisateur postgresql mot de passe si vous ne l'avez pas, c'est juste de la barre oblique inverse mot de passe.

postgres=# \password

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

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

Maintenant mettre à jour votre base de données.fichier yml après que vous avez confirmé la création de la base de données, utilisateur, mot de passe et de l'ensemble de ces privilèges. N'oubliez pas de l'hôte: localhost.

59voto

Starkers Points 781

C'est le plus infaillible pour obtenir votre application rails de travail avec postgres dans l' environnement de développement dans Ubuntu 13.10.

1) Créer une application rails avec postgres YAML et 'pg' gem dans le Gemfile:

$ rails new my_application -d postgresql

2) Donner une certaine fonctionnalité CRUD. Si vous êtes juste de voir si postgres fonctionne, créez un échafaudage:

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

3) rails 4.0.1 le -d postgresql option génère un YAML qui ne comprennent pas un paramètre hôte. J'ai trouvé j'ai besoin de cette. Modifier la section de l'élaboration et de créer les paramètres suivants:

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

Remarque l' database paramètre est pour une base de données qui n'est pas encore sortie, et l' username et password sont des informations d'identification pour un rôle qui n'existe pas. Nous allons créer par la suite!

C'est combien de config/database.yml devrait ressembler (pas de honte à copypasting :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 postgres shell avec cette commande:

$ psql

4a), Vous pouvez obtenir cette erreur si votre utilisateur courant (comme dans votre ordinateur de l'utilisateur) n'ont pas de correspondant administration postgres rôle.

psql: FATAL:  role "your_username" does not exist

Maintenant, j'ai seulement installé postgres une fois, donc j'ai peut-être tort, mais je pense que postgres crée automatiquement un rôle d'administration avec les mêmes informations d'identification de l'utilisateur que vous avez installé postgres.

4b) Donc cela signifie que vous devez modifier pour l'utilisateur qui a installé postgres pour utiliser la commande psql et démarrer le shell:

$ sudo su postgres

Et puis exécutez

$ psql

5) Vous savez que vous êtes dans la postgres shell parce que votre terminal devrait ressembler à ceci:

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

postgres=# 

6) postgresql à l'Aide de la syntaxe, nous allons créer l'utilisateur que nous avons spécifié dans config/database.yml's le développement de la section:

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

Maintenant, il y a quelques subtilités ici, donc nous allons les passer en revue.

  • Le rôle de l'utilisateur, thisismynewusername, ne pas avoir des devis de toute nature autour d'elle
  • Spécifiez le mot-clé de CONNEXION après le AVEC des. Si vous ne le faites pas, le rôle sera encore créé, mais il ne sera pas en mesure de se connecter à la base de données!
  • Le rôle du mot de passe, 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=#

Que signifie, "le RÔLE CRÉÉ", mais postgres' alertes semblent adopter le même impératif conventions de git hub.

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

postgres=# CREATE DATABASE my_application_development OWNER thisismynewusername;

Vous saurez si vous avez été un succès parce que vous aurez le résultat:

CREATE DATABASE

8) Quitter la postgres shell:

\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 ma machine locale, j'ai continué à obtenir une erreur d'autorisation. Je ne m'en souviens pas exactement, mais c'était une erreur le long des lignes de

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

Bien que je conseille de penser très attentivement à la manière récursive réglage écrire privaledges sur une machine de production, localement, j'ai donné tout mon app lire des privilèges d'écriture comme ceci:

9b) Montée jusqu'à un niveau de répertoire:

$ cd ..

9c) Définir les autorisations de la mon_application répertoire et tout son contenu à 666:

$ chmod -R 0666 my_application

9d) Et exécutez à nouveau la migration:

$ RAILS_ENV=development rake db:migrate

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

Quelques conseils et astuces si vous muck up

Essayez ces avant de redémarrer l'ensemble de ces étapes:

Le mynewusername utilisateur ne dispose pas des privilèges pour CRUD à l' my_app_development de la base de données? Supprimer la base de données et créer de nouveau avec mynewusername comme le propriétaire:

1) Démarrer le postgres shell:

$ psql

2) la suppression de la my_app_development de la base de données. Attention! Baisse des moyens totalement supprimer!

postgres=# DROP DATABASE my_app_development;

3) en Recréer un autre my_app_development et faire mynewusername le propriétaire:

postgres=# CREATE DATABASE my_application_development OWNER mynewusername;

4) Quitter le shell:

postgres=# \q

L' mynewusername utilisateur ne peut pas se connecter à la base de données? Pense que vous avez écrit le mauvais mot de passe dans le fichier YAML et ne me souviens pas le mot de passe que vous avez entré à l'aide de la postgres shell? Tout simplement modifier le rôle avec le YAML mot de passe:

1) Ouvrez votre YAML, et de copier le mot de passe de 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 postgres shell:

$ psql    

3) mise à Jour de mynewusernames'mot de passe. Coller le mot de passe, et n'oubliez pas de mettre des guillemets simples autour d'elle:

postgres=# ALTER ROLE mynewusername PASSWORD `musthavebeenverydrunkwheniwrotethis`;

4) Quitter le shell:

postgres=# \q

Essayez de vous connecter à localhost via une base de données spectateur comme Dbeaver, et ne savez pas ce que votre utilisateur postgres du mot de passe? Modifier comme ceci:

1) Exécutez passwd en tant que super-utilisateur:

$ sudo passwd postgres

2) Entrez votre mot de passe pour les comptes sudo (rien à voir avec postgres):

[sudo] password for starkers: myaccountpassword

3) Créer le compte postgres nouveau passwod:

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

Recevoir 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 à vos utilisateurs la possibilité de créer des bases de données. À partir de la psql shell:

ALTER ROLE thisismynewusername WITH CREATEDB

33voto

Sumit Munot Points 1253

Pour une solution permanente:

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

 local   all             postgres                                peer
 

Devrait être

 local   all             postgres                                md5
 

Ensuite, redémarrez votre serveur postgresql après avoir modifié ce fichier.

Si vous êtes sous Linux, la commande serait

 sudo service postgresql restart
 

0voto

David Winiecki Points 673

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X