it-swarm.com.de

Rails 3.2, FATAL: Peer-Authentifizierung für Benutzer fehlgeschlagen (PG :: Error)

Ich führe meine Entwicklung auf Ubuntu 11.10 und RubyMine durch

Hier sind meine Entwicklungseinstellungen für die database.yml: welche RubyMine für mich erstellt hat

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

wenn ich versuche, die App auszuführen, wird die folgende Fehlermeldung angezeigt. Ich habe anscheinend noch keinen Projektbenutzer erstellt. Wie kann ich jedoch einen Benutzer erstellen und ihm eine Datenbank in Postgres zuweisen? Wenn dies das Problem ist, welches ist das empfohlene Werkzeug, das in Ubuntu für diese Aufgabe verwendet werden soll? Wenn dies nicht das Problem ist, dann bitte Rat.

Exiting
/home/sam/.rvm/gems/[email protected]/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/[email protected]/gems/activerecord-3.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:1194:in `new'
    from /home/sam/.rvm/gems/[email protected]/gems/activerecord-3.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:1194:in `connect'
    from /home/sam/.rvm/gems/[email protected]/gems/activerecord-3.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:329:in `initialize'
    from /home/sam/.rvm/gems/[email protected]/gems/activerecord-3.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:28:in `new'
    from /home/sam/.rvm/gems/[email protected]/gems/activerecord-3.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:28:in `postgresql_connection'
    from /home/sam/.rvm/gems/[email protected]/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:303:in `new_connection'
    from /home/sam/.rvm/gems/[email protected]/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:313:in `checkout_new_connection'
    from /home/sam/.rvm/gems/[email protected]/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/[email protected]/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:232:in `loop'
    from /home/sam/.rvm/gems/[email protected]/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/[email protected]/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:229:in `checkout'
    from /home/sam/.rvm/gems/[email protected]/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:95:in `connection'
    from /home/sam/.rvm/gems/[email protected]/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:398:in `retrieve_connection'
    from /home/sam/.rvm/gems/[email protected]/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_specification.rb:168:in `retrieve_connection'
    from /home/sam/.rvm/gems/[email protected]/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_specification.rb:142:in `connection'
    from /home/sam/.rvm/gems/[email protected]/gems/activerecord-3.2.3/lib/active_record/model_schema.rb:308:in `clear_cache!'
    from /home/sam/.rvm/gems/[email protected]/gems/activerecord-3.2.3/lib/active_record/railtie.rb:91:in `block (2 levels) in <class:Railtie>'
    from /home/sam/.rvm/gems/[email protected]/gems/activesupport-3.2.3/lib/active_support/callbacks.rb:418:in `_run__757346023__prepare__404863399__callbacks'
    from /home/sam/.rvm/gems/[email protected]/gems/activesupport-3.2.3/lib/active_support/callbacks.rb:405:in `__run_callback'
    from /home/sam/.rvm/gems/[email protected]/gems/activesupport-3.2.3/lib/active_support/callbacks.rb:385:in `_run_prepare_callbacks'
    from /home/sam/.rvm/gems/[email protected]/gems/activesupport-3.2.3/lib/active_support/callbacks.rb:81:in `run_callbacks'
    from /home/sam/.rvm/gems/[email protected]/gems/actionpack-3.2.3/lib/action_dispatch/middleware/reloader.rb:74:in `prepare!'
    from /home/sam/.rvm/gems/[email protected]/gems/actionpack-3.2.3/lib/action_dispatch/middleware/reloader.rb:48:in `prepare!'
    from /home/sam/.rvm/gems/[email protected]/gems/railties-3.2.3/lib/Rails/application/finisher.rb:47:in `block in <module:Finisher>'
    from /home/sam/.rvm/gems/[email protected]/gems/railties-3.2.3/lib/Rails/initializable.rb:30:in `instance_exec'
    from /home/sam/.rvm/gems/[email protected]/gems/railties-3.2.3/lib/Rails/initializable.rb:30:in `run'
    from /home/sam/.rvm/gems/[email protected]/gems/railties-3.2.3/lib/Rails/initializable.rb:55:in `block in run_initializers'
    from /home/sam/.rvm/gems/[email protected]/gems/railties-3.2.3/lib/Rails/initializable.rb:54:in `each'
    from /home/sam/.rvm/gems/[email protected]/gems/railties-3.2.3/lib/Rails/initializable.rb:54:in `run_initializers'
    from /home/sam/.rvm/gems/[email protected]/gems/railties-3.2.3/lib/Rails/application.rb:136:in `initialize!'
    from /home/sam/.rvm/gems/[email protected]/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/[email protected]/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:251:in `require'
    from /home/sam/.rvm/gems/[email protected]/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:251:in `block in require'
    from /home/sam/.rvm/gems/[email protected]/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:236:in `load_dependency'
    from /home/sam/.rvm/gems/[email protected]/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/[email protected]/gems/rack-1.4.1/lib/rack/builder.rb:51:in `instance_eval'
    from /home/sam/.rvm/gems/[email protected]/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/[email protected]/gems/rack-1.4.1/lib/rack/builder.rb:40:in `eval'
    from /home/sam/.rvm/gems/[email protected]/gems/rack-1.4.1/lib/rack/builder.rb:40:in `parse_file'
    from /home/sam/.rvm/gems/[email protected]/gems/rack-1.4.1/lib/rack/server.rb:200:in `app'
    from /home/sam/.rvm/gems/[email protected]/gems/railties-3.2.3/lib/Rails/commands/server.rb:46:in `app'
    from /home/sam/.rvm/gems/[email protected]/gems/rack-1.4.1/lib/rack/server.rb:301:in `wrapped_app'
    from /home/sam/.rvm/gems/[email protected]/gems/rack-1.4.1/lib/rack/server.rb:252:in `start'
    from /home/sam/.rvm/gems/[email protected]/gems/railties-3.2.3/lib/Rails/commands/server.rb:70:in `start'
    from /home/sam/.rvm/gems/[email protected]/gems/railties-3.2.3/lib/Rails/commands.rb:55:in `block in <top (required)>'
    from /home/sam/.rvm/gems/[email protected]/gems/railties-3.2.3/lib/Rails/commands.rb:50:in `tap'
    from /home/sam/.rvm/gems/[email protected]/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

Wenn Sie postresql auf Ihrem Server installiert haben, hosten Sie einfach host: localhost in database.yml. Ich werfe es normalerweise in dem Bereich, in dem pool steht: 5. Andernfalls sagen Sie der App auf jeden Fall, wo sie ihre Datenbank findet. 

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

Stellen Sie sicher, dass Ihre Benutzeranmeldeinformationen korrekt festgelegt sind, indem Sie eine Datenbank erstellen und dem Benutzer der App den Besitz zuweisen, um die Verbindung herzustellen. So erstellen Sie einen neuen Benutzer in Postgresql 9:

Sudo -u postgres psql

wenn Sie dies nicht getan haben, legen Sie das Postgresql-Benutzerpasswort fest. Es ist nur ein Backslash-Passwort.

postgres=# \password

Erstellen Sie einen neuen Benutzer und ein neues Kennwort sowie die neue Datenbank des Benutzers:

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

Aktualisieren Sie nun Ihre database.yml-Datei, nachdem Sie die Erstellung der Datenbank, des Benutzers und des Kennworts bestätigt und diese Berechtigungen festgelegt haben. Vergessen Sie nicht Host: localhost.

287
Bent Cardan

Dies ist die narrensicherste Möglichkeit, Ihre Rails-App mit Postgres in der Entwicklungsumgebung in Ubuntu 13.10 zu betreiben. 

1) Erstellen Sie eine Rails-App mit Postgres-YAML und "pg" -Edel im Gemfile:

$ Rails new my_application -d postgresql

2) Geben Sie CRUD-Funktionalität. Wenn Sie nur sehen, ob Postgres funktioniert, erstellen Sie ein Gerüst:

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

3) Ab Rails 4.0.1 generiert die -d postgresql-Option eine YAML, die keinen Host-Parameter enthält. Ich fand das brauchte ich. Bearbeiten Sie den Entwicklungsabschnitt und erstellen Sie die folgenden Parameter: 

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

Beachten Sie, dass der Parameter database für eine Datenbank gilt, die noch nicht beendet wird, und username und password sind Berechtigungsnachweise für eine Rolle, die ebenfalls nicht vorhanden ist. Die schaffen wir später!

So sollte config/database.yml aussehen (keine Schande beim 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) Starten Sie die Postgres-Shell mit diesem Befehl:

$ psql

4a) Möglicherweise erhalten Sie diese Fehlermeldung, wenn Ihr aktueller Benutzer (wie in Ihrem Computerbenutzer) keine entsprechende Administratorrolle für Administratoren hat.

psql: FATAL:  role "your_username" does not exist

Jetzt habe ich Postgres nur einmal installiert, deshalb kann ich hier falsch liegen, aber ich denke, Postgres erstellt automatisch eine Administrationsrolle mit den gleichen Berechtigungen wie der Benutzer, als den Sie Postgres installiert haben. 

4b) Das heißt, Sie müssen zu dem Benutzer wechseln, der Postgres installiert hat, um den Befehl psql zu verwenden und die Shell zu starten:

$ Sudo su postgres

Und dann renn

$ psql

5) Sie wissen, dass Sie sich in der Postgres-Shell befinden, weil Ihr Terminal so aussehen wird:

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

postgres=# 

6) Erstellen Sie mit der postgresql-Syntax den Benutzer, den Sie in config/database.ymls development -Abschnitt angegeben haben:

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

Jetzt gibt es einige Feinheiten, also gehen wir sie näher durch. 

  • Der Benutzername der Rolle thisismynewusername, hat keine Anführungszeichen
  • Geben Sie das Schlüsselwort LOGIN nach dem MIT an. Wenn Sie dies nicht tun, wird die Rolle immer noch erstellt, sie kann sich jedoch nicht bei der Datenbank anmelden!
  • Das Rollenkennwort thisismynewpassword muss in einfache Anführungszeichen gesetzt werden. Keine Anführungszeichen.
  • Fügen Sie am Ende ein Semikolon hinzu;)

Sie sollten dies in Ihrem Terminal sehen:

postgres=#
CREATE ROLE
postgres=#

Das bedeutet "ROLE CREATED", aber die Warnmeldungen von Postgres scheinen die gleichen zwingenden Konventionen von Git Hub zu übernehmen.

7) Jetzt noch in der Postgres-Shell müssen wir die Datenbank mit dem Namen erstellen, den wir in der YAML festgelegt haben. Machen Sie den Benutzer, den wir in Schritt 6 erstellt haben, zu seinem Besitzer:

postgres=# CREATE DATABASE my_application_development OWNER thisismynewusername;

Sie wissen, ob Sie erfolgreich waren, weil Sie die Ausgabe erhalten: 

CREATE DATABASE

8) Verlasse die Postgres-Shell:

\q

9) Nun der Moment der Wahrheit:

$ Rails_ENV=development rake db:migrate

Wenn Sie das bekommen:

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

Glückwunsch, Postgres arbeitet perfekt mit Ihrer App zusammen. 

9a) Auf meinem lokalen Computer wurde immer ein Fehler bei der Berechtigung angezeigt. Ich kann mich nicht genau erinnern, aber es war ein Fehler im Sinne von

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

Obwohl ich raten sollte, sehr genau über das rekursive Setzen von Schreibvoraussetzungen auf einer Produktionsmaschine nachzudenken, gab ich meiner gesamten App Leserechte wie diese: 

9b) Eine Verzeichnisebene hochklettern:

$ cd ..

9c) Setzen Sie die Berechtigungen des my_application-Verzeichnisses und seines gesamten Inhalts auf 666:

$ chmod -R 0666 my_application

9d) Führen Sie die Migration erneut aus:

$ Rails_ENV=development rake db:migrate

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

Ein paar Tipps und Tricks, wenn du dich aufmachst

Versuchen Sie Folgendes, bevor Sie alle folgenden Schritte erneut starten:

Der Benutzer mit dem Benutzernamen "mynewusername" hat keine Berechtigungen für CRUD für die my_app_development-Datenbank? Löschen Sie die Datenbank und erstellen Sie sie erneut mit dem Benutzernamen mynewusername:

1) Starten Sie die Postgres-Shell:

$ psql

2) Löschen Sie die my_app_development-Datenbank. Achtung! Drop bedeutet völlig löschen!

postgres=# DROP DATABASE my_app_development;

3) Erstellen Sie einen weiteren my_app_development und machen Sie meinen Besitzer als Besitzer:

postgres=# CREATE DATABASE my_application_development OWNER mynewusername;

4) Verlasse die Shell:

postgres=# \q

Der Benutzer mynewusername kann sich nicht bei der Datenbank anmelden? Denken Sie, Sie haben das falsche Passwort in die YAML geschrieben und können sich das von Ihnen mit der Postgres-Shell eingegebene Passwort nicht mehr richtig merken? Ändern Sie einfach die Rolle mit dem YAML-Passwort:

1) Öffnen Sie Ihre YAML und kopieren Sie das Passwort in Ihre Zwischenablage:

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

2) Starten Sie die Postgres-Shell:

$ psql    

3) Aktualisieren Sie das Passwort der mynewusername. Fügen Sie das Passwort ein und denken Sie daran, einzelne Anführungszeichen einzugeben:

postgres=# ALTER ROLE mynewusername PASSWORD `musthavebeenverydrunkwheniwrotethis`;

4) Verlasse die Shell:

postgres=# \q

Sie versuchen, über einen Datenbank-Viewer wie Dbeaver eine Verbindung zu localhost herzustellen, und wissen nicht, wie das Kennwort Ihres Postgres-Benutzers lautet. Ändere es so:

1) Führen Sie passwd als Superuser aus:

$ Sudo passwd postgres

2) Geben Sie Ihr Kontopasswort für Sudo ein (nichts mit Postgres zu tun):

[Sudo] password for starkers: myaccountpassword

3) Erstellen Sie das neue Passwort des Postgres-Kontos:

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

Erhalten dieser Fehlermeldung ?:

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) Sie müssen Ihrem Benutzer die Möglichkeit geben, Datenbanken zu erstellen. Aus der psql-Shell:

ALTER ROLE thisismynewusername WITH CREATEDB
52
Starkers

Für dauerhafte Lösung: 

Das Problem liegt bei Ihrem pg_hba. Diese Linie:

local   all             postgres                                peer

Sollte sein

local   all             postgres                                md5

Starten Sie anschließend den Postgresql-Server nach dem Ändern dieser Datei neu. 

Wenn Sie unter Linux sind, wäre der Befehl 

Sudo service postgresql restart
29
Sumit Munot

Ich war mit demselben Problem auf Ubuntu-Computern konfrontiert, daher habe ich diesen Fehler mit einigen Schritten entfernt. Zum Postgres-Benutzer wechseln

$ Sudo su - postgres 

es fragt nach dem Passwort und standardmäßig ist postgres

Nachdem Sie den Benutzer auf postgres umgestellt haben, öffnen Sie die psql-Konsole

$ psql

Überprüfen Sie daher die Version von Postgres, ob mehrere Versionen verfügbar sind

psql=# select VERSION();

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

Jetzt postgres user öffnen

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

9.1 ist der obere Befehl der Versionsrückgabe

und ersetzen

local   all             postgres                                peer

zu

local   all             postgres                                md5

Sudo service postgresql restart

Ich schreibe auch Schritte auf meinem Blog

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

9
Tarun Garg

Sie können zu Ihrer Datei /var/lib/pgsql/data/pg_hba.conf gehen und anstelle von Ident Vertrauen hinzufügen. Es hat für mich funktioniert. 

local   all all trust
Host    all 127.0.0.1/32    trust

Weitere Informationen finden Sie in diesem Problem Identifizierungsauthentifizierung für Benutzer fehlgeschlagen

5
Rastee

Das Hinzufügen von "Host: locahost" war die Magie für mich

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

Wenn Sie beim Ausführen von Komponententests diese Fehlermeldung (Peer authentication failed for user (PG::Error)) erhalten, stellen Sie sicher, dass die Testdatenbank vorhanden ist.

0
David Winiecki