2012-04-03 7 views
124

ich meine Entwicklung auf Ubuntu 11.10 und RubyMineRails 3.2, FATAL: Peer-Authentifizierung für Benutzer fehlgeschlagen (PG :: Error)

Hier leite meine Entwicklung Einstellungen für die database.yml: die RubyMine für mich geschaffen

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

wenn ich versuche, um die App zu laufen, bekomme ich diesen Fehler unten, wie es scheint, dass ich nicht einen ‚Projekt‘ Benutzer noch selbst erstellt hat, aber, wie kann ich einen Benutzer erstellen und erteilen ihm eine Datenbank in Postgres? Wenn dies das Problem ist, was ist dann das empfohlene Tool, das in Ubuntu für diese Aufgabe verwendet wird? Wenn dies nicht das Problem ist, dann bitte um 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]oject/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 
+0

Ich glaube, ich etwas, was hier http://xtremekforever.blogspot.com/2011/05/setup-rails-project-with-postgresql- on.html – simo

Antwort

269

Wenn Sie PostreSQL auf dem Server installiert dann hosten nur: localhost database.yml, ich habe es in der Regel in der Nähe von werfen, wo es heißt Pool: 5. Andernfalls, wenn es nicht definitiv ist localhost, dass die App sagen, wo zu finden, seine Datenbank.

Stellen Sie sicher, dass Ihre Benutzeranmeldeinformationen korrekt festgelegt sind, indem Sie eine Datenbank erstellen und dem Benutzer Ihrer App den Eigentumsanteil zuweisen, um die Verbindung herzustellen. Um einen neuen Benutzer in postgresql 9 Laufe zu erstellen:

sudo -u postgres psql 

das postgresql Benutzerkennwort festgelegt, wenn Sie nicht, es ist nur Backslash Passwort.

postgres=# \password 

Erstellen Sie einen neuen Benutzer und Passwort und die neue Datenbank des Benutzers:

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

jetzt Ihre database.yml-Datei aktualisieren, nachdem Sie die Datenbank, Benutzer, Passwort Erstellen bestätigt haben und diese Berechtigungen festgelegt. Nicht vergessen Host: localhost.

+2

Wenn Sie immer noch Probleme haben, sich einzuloggen und die Verbindung über localhost zu beenden, gehen Sie zurück in postgresql über Terminal und wenden Sie einige dieser 8.2 Konventionen an, um die Rechte Ihres verbindenden Benutzers herzustellen, die Syntax lautet GRANT ALL ON DATABASE [dbname] to Benutzername Diese Syntax funktioniert bei psql 9+ genauso, aber Sie können wahrscheinlich nur die Berechtigungen für Datenbanken ändern, die dem Benutzer gehören, bevor er GRANT ALL: http://www.postgresql.org/docs/8.2/static/sql-grant. html –

+28

'host: localhost' und' pool: 5' fehlten in meiner Konfiguration. Nach dem Hinzufügen ist der Fehler verschwunden. –

+17

Für mich fehlte 'host: localhost'. nachdem ich hinzugefügt habe, hat alles funktioniert. Dies ist in Ubuntu 13.04 – Jesse

49

Dies ist der sicherste Weg, um Ihre Rails-Anwendung mit Postgres in der Entwicklungsumgebung in Ubuntu 13.10 zum Laufen zu bringen.

1) Erstellen Sie Rails-Anwendung mit Postgres YAML und 'pg' Juwel in der Gemfile:

$ rails new my_application -d postgresql 

2) Geben Sie ihm eine CRUD-Funktionalität. Wenn Sie gerade 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 die -d postgresql Option eine YAML erzeugt, die keinen Host-Parameter enthält. Ich fand, dass ich das brauchte. Bearbeiten Sie den Entwicklungsabschnitt und erstellen Sie die folgenden Parameter:

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

Notiere die database Parameter für eine Datenbank ist, die noch nicht beendet und das username und password sind Anmeldeinformationen für eine Rolle, die nicht entweder nicht vorhanden ist. Wir werden diese später erstellen!Dies ist

wie config/database.yml (keine Scham in copypasting: D): aussehen sollte

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) Sie können diesen Fehler wenn Ihr aktueller Benutzer (wie in Ihrem Computerbenutzer) keine entsprechende postgres-Administratorrolle hat.

psql: FATAL: role "your_username" does not exist 

Jetzt habe ich nur einmal installiert Postgres, so kann ich hier falsch sein, aber ich denke, Postgres automatisch eine Verwaltungsrolle mit den gleichen Anmeldeinformationen erstellt, wenn der Benutzer installierten Postgres wie.

4b) Also das bedeutet, dass Sie für den Benutzer ändern müssen, die Postgres installiert, um den psql-Befehl zu verwenden und die Shell starten:

$ sudo su postgres 

Und dann

$ psql 

5) Sie führen‘ Ich weiß, dass Sie in der Postgres-Shell sind, weil Ihr Terminal wie folgt aussehen wird:

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

postgres=# 

6) Verwenden die postgresql Syntax, lassen Sie uns den Benutzer schaffen wir in config/database.yml ‚s Entwicklung Abschnitt angegeben:

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

Jetzt gibt es einige Feinheiten hier also lassen Sie uns über sie gehen.

  • Der Benutzername Rolle, thisismynewusername, hat keine Zitate jeglicher Art um ihn herum
  • die LOGIN nach dem MIT Schlüsselwort angeben. Wenn Sie dies nicht tun, wird die Rolle trotzdem erstellt, aber sie kann sich nicht bei der Datenbank anmelden!
  • Das Passwort der Rolle, thisismynewpassword, muss in einfache Anführungszeichen gesetzt werden. Nicht doppelte Anführungszeichen.
  • hinzufügen Semikolon am Ende;)

Sie diese in Ihrem Terminal sehen sollte:

postgres=# 
CREATE ROLE 
postgres=# 

Das heißt, "Rolle angelegt", aber Postgres' Warnungen scheinen die gleichen zu übernehmen Imperative Konventionen von git Hub.

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 wir in Schritt 6 erstellten seinen Besitzer:

postgres=# CREATE DATABASE my_application_development OWNER thisismynewusername; 

Sie wissen, wenn Sie erfolgreich waren, weil Sie die Ausgabe bekommen:

CREATE DATABASE 

8) Beenden Sie die Postgres-Shell:

\q 

9) Nun ist die Stunde der Wahrheit:

$ RAILS_ENV=development rake db:migrate 

Wenn Sie diese:

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

Gratulation, Postgres perfekt mit Ihrer App zu arbeiten.

9a) Auf meinem lokalen Computer habe ich immer einen Berechtigungsfehler erhalten. Ich kann es nicht mehr genau erinnern, aber es war ein Fehler nach dem Vorbild der

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

Obwohl ich sehr sorgfältig denken raten würde rekursiv Schreib privaledges auf einer Produktionsmaschine Einstellung vor Ort, gab ich meine ganze app Lese Schreibrechte wie folgt aus:

9b) eine Verzeichnisebene Klettert:

$ cd .. 

9c) Legen Sie die Berechtigungen des my_application Verzeichnis und seinen gesamten Inhalt auf 666:

$ chmod -R 0666 my_application 

9d) und die Migration erneut aus:

$ RAILS_ENV=development rake db:migrate 

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

einige Tipps und Tricks, wenn Sie

diese versuchen verhunzen vor, alle diese Schritte einen Neustart:

Die mynewusername Benutzer verfügt nicht über Berechtigungen für CRUD in der my_app_development-Datenbank? Löschen Sie die Datenbank, und erstellen Sie es erneut mit mynewusername als Eigentümer:

1) Starten Sie die Postgres-Shell:

$ psql 

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

postgres=# DROP DATABASE my_app_development; 

3) Erstellen Sie eine weitere my_app_development und mynewusername den Besitzer machen:

postgres=# CREATE DATABASE my_application_development OWNER mynewusername; 

4) Beenden Sie die Schale:

postgres=# \q 

Der mynewusername Benutzer kann nicht in der Datenbank anmelden?Denken Sie, Sie haben das falsche Passwort in der YAML geschrieben und können sich nicht mehr an das Passwort erinnern, das Sie mit der postgres-Shell eingegeben haben? ändern Sie einfach die Rolle mit dem YAML Passwort:

1) Öffnen Sie Ihre YAML, und kopieren Sie das Passwort in die 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 das Postgres Shell:

$ psql  

3) Aktualisieren Sie das Passwort mynewusername. Fügen Sie das Passwort ein, und denken Sie daran einfache Anführungszeichen um es zu setzen:

postgres=# ALTER ROLE mynewusername PASSWORD `musthavebeenverydrunkwheniwrotethis`; 

4) Beenden Sie die Schale:

postgres=# \q 

Der Versuch, eine Verbindung über einen Datenbank-Viewer wie Dbeaver auf localhost, und don Wissen Sie nicht, wie das Passwort Ihres Postgres-Benutzers lautet? Ändern Sie es wie folgt aus:

1) Führen Sie passwd als Superuser:

$ sudo passwd postgres 

2) Geben Sie Ihre Konten Passwort für sudo (nichts mit Postgres zu tun):

[sudo] password for starkers: myaccountpassword 

3) Erstellen Sie das neue Passwort des Postgre-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 benötigen Benutzer die Möglichkeit, Datenbanken zu erstellen zu geben. Von der psql-Shell:

ALTER ROLE thisismynewusername WITH CREATEDB 
+0

Ich wünschte, ich könnte Ihnen mehr +1 für diese brillante Lösung geben, wäre ich noch glücklicher, wenn es für mich funktionierte. Immer noch eine brillante Antwort. schnelle Frage, sind diese Backticks um das Passwort in alter Rolle? Außerdem brauchst du keine Backticks früher, oder? –

+0

@ MikeH-R Danke, Schade, es funktioniert nicht für dich! Sind Sie sicher, dass Ihr relevanter YAML 'host: localhost' hat? Das war die richtige Entscheidung für mich. Um das Passwort herum benötigen Sie einfache Anführungszeichen. Auf meiner Tastatur ist das 'shift' +' @ '. Mit der psql-Shell benötigen Sie nur einfache Anführungszeichen um einige Parameter. Sie benötigen sie zum Beispiel um das Passwort und ** nicht ** um den Namen der Rolle.Es ist sehr fummelig, um ehrlich zu sein, aber okay, sobald du weißt, dass es Nuancen sind :) – Starkers

+0

@ MikeH-R Ich habe meine Antwort verbessert, um die Dinge klarer zu machen. Überlege, ob du noch einen Riss haben solltest! – Starkers

28

Für eine dauerhafte Lösung:

Das Problem ist, mit Ihrem pg_hba. Diese Zeile:

local all    postgres        peer 

Sollte nach der Änderung dieser Datei

local all    postgres        md5 

Dann starten Sie Ihren postgresql-Server sein.

Wenn Sie auf Linux sind, dann würde Befehl

sudo service postgresql restart 
0

sein Wenn Sie diese Fehlermeldung erhalten (Peer authentication failed for user (PG::Error)), wenn Unit-Tests ausführen, stellen Sie sicher, dass die Testdatenbank vorhanden ist.

6

Ich hatte das gleiche Problem auf Ubuntu Maschine, also habe ich diesen Fehler durch Befolgen einiger Schritte entfernt. Umschalten auf Postgres Benutzer

$ sudo su - postgres

es für Passwort fragen wird und von Standard-Passwort ist postgres

Nach dem Einschalten der Benutzer auf Postgres, offene psql Konsole

$ psql 

so die Version überprüfen von Postgres, wenn mehrere Versionen verfügbar sind

psql=# select VERSION(); 

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

Jetzt öffnen postgres user

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

9.1 ist Version Rückgabeformular obere Befehl

und ersetzen

local all    postgres        peer 

zu

local all    postgres        md5 

sudo service postgresql restart

Ich schreibe Schritte auf meinem Blog auch

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

+0

Sie haben eine richtige Antwort gegeben, nur eine Sache verpasst, die Sie brauchen, um die Version nicht zu überprüfen. Sie können das Passwort ändern, indem Sie den folgenden Befehl ausführen: psql Benutzer ändern "username" set password 'xyz'; – vishu

+0

Denken Sie daran, dass die 'md5'-Authentifizierung für Ihren Datenbankbenutzer ein Nicht-Null-Passwort erfordert (das hat heute nur wenig mit sich gebracht, während Sie versuchen, die Faulheit beim Erstellen einer Rails-Anwendung zu maximieren). –

5

Sie auf Ihre /var/lib/pgsql/data/pg_hba.conf Datei gehen und fügen Sie Vertrauen anstelle von Ident Es hat für mich gearbeitet.

local all all trust 
host all 127.0.0.1/32 trust 

Für weitere Informationen zu diesem Thema finden Sie Ident authentication failed for user

+0

Centos 6.6, versuchen Sie: '/ var/lib/pgsql/9.2/data/pg_hba.conf' – Patrick

Verwandte Themen