2012-04-03 9 views
124

Sto facendo funzionare il mio sviluppo su Ubuntu 11.10, e RubyMineRails 3.2, FATAL: l'autenticazione peer non riuscita per l'utente (PG :: Errore)

Ecco le mie impostazioni di sviluppo per il database.yml: che RubyMine ha creato per me

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

quando provo a fare funzionare l'applicazione, ottengo questo errore qui sotto, sembra che non ho ancora creare un utente 'progetto', ma, come posso creare un utente e Grant è un database in postgres? se questo è il problema, allora, qual è lo strumento consigliato da utilizzare in Ubuntu per questa attività? se questo non è il problema, quindi, per favore consiglio.

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 
+0

Credo di aver trovato qui qualche cosa http://xtremekforever.blogspot.com/2011/05/setup-rails-project-with-postgresql- on.html – simo

risposta

269

Se avete installato sul vostro server PostreSQL poi basta ospitare: localhost per database.yml, io di solito butto in giro dove si dice piscina: 5. In caso contrario, se non è localhost sicuramente dire che app dove trovare la sua Banca dati.

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

Assicurarsi che le credenziali utente siano impostate correttamente con la creazione di una banca dati e l'assegnazione di diritti di proprietà per l'utente della vostra applicazione per stabilire la connessione. Per creare un nuovo utente in PostgreSQL 9 run:

sudo -u postgres psql 

impostare la password utente PostgreSQL, se non si dispone, è solo la password backslash.

postgres=# \password 

creare un nuovo utente e la password e il nuovo database dell'utente:

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

Ora aggiornare il file database.yml dopo aver confermato la creazione del database, utente, password e impostare questi privilegi. Non dimenticare l'host: localhost.

+2

se hai ancora problemi di accesso e completa la connessione su localhost quindi torna in postgresql tramite terminale e applica alcune di queste 8.2 convenzioni per stabilire i privilegi dell'utente di collegamento, la sintassi è GRANT ALL ON DATABASE [dbname] in [ usrname]. Questa sintassi funziona allo stesso modo su psql 9+, ma probabilmente è possibile solo abilitare le autorizzazioni sui database di proprietà dell'utente prima che GRANT ALL: http://www.postgresql.org/docs/8.2/static/sql-grant. html –

+28

'host: localhost' e' pool: 5' mancava nella mia configurazione. Dopo averli aggiunti, l'errore è scomparso. –

+17

Per me 'host: localhost' era mancante. dopo averlo aggiunto, tutto ha funzionato. Questo è in Ubuntu 13.04 – Jesse

49

questo è il modo più infallibile per ottenere la vostra applicazione Rails lavoro con Postgres nell'ambiente sviluppo in Ubuntu 13.10.

1) Creare rotaie app con Postgres YAML e gemma 'pg' nel Gemfile:

$ rails new my_application -d postgresql 

2) dare qualche funzionalità CRUD. Se sei solo vedere se Postgres funziona, creare un'impalcatura:

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

3) A partire dal rails 4.0.1 l'opzione -d postgresql genera un YAML che non include un parametro host. Ho trovato che avevo bisogno di questo. Modificare la sezione di sviluppo e creare i seguenti parametri:

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

Nota il parametro database è per un database che non uscire ancora, e il username e password sono credenziali per un ruolo che non esiste neanche. Creeremo quelli in seguito!

Questo è il modo config/database.yml dovrebbe guardare (nessuna vergogna in 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) Avviare lo postgres shell con questo comando:

$ psql 

4a) È possibile ottenere questo errore se il tuo utente corrente (come nel tuo utente del computer) non ha un ruolo di postgenda di amministrazione corrispondente.

psql: FATAL: role "your_username" does not exist 

postgres Ora ho installato solo una volta, così che io possa essere sbagliato qui, ma penso che Postgres crea automaticamente un ruolo di amministrazione con le stesse credenziali come l'utente installati Postgres come.

4b) Quindi questo significa che è necessario cambiare l'utente che ha installato postgres per utilizzare il comando psql e avviare la shell:

$ sudo su postgres 

e quindi eseguire

$ psql 

5) È' Sapremo che sei nella shell postgres perché il tuo terminale sarà simile a questo:

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

postgres=# 

6) Utilizzo la sintassi PostgreSQL, creiamo l'utente abbiamo specificato in sviluppo sezione config/database.yml s':

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

Ora, ci sono alcune sottigliezze qui quindi andiamo su di loro.

  • nome utente del ruolo, thisismynewusername, non ha citazioni di ogni genere intorno ad esso
  • specificare la parola chiave LOGIN dopo la CON. In caso contrario, il ruolo verrà comunque creato, ma non sarà in grado di accedere al database!
  • La password del ruolo, thisismynewpassword, deve essere racchiusa tra virgolette singole. Non doppie virgolette.
  • Aggiungere un punto e virgola alla fine;)

Si dovrebbe vedere questo nel vostro terminale:

postgres=# 
CREATE ROLE 
postgres=# 

Ciò significa, "RUOLO CREATO", ma avvisi postgres' sembrano adottare lo stesso Convenzioni imperative di git hub.

7) Ora, ancora nella shell di Postgres, dobbiamo creare il database con il nome che abbiamo impostato in YAML.Rendere l'utente che abbiamo creato al punto 6 il suo proprietario:

postgres=# CREATE DATABASE my_application_development OWNER thisismynewusername; 

Saprete se tu fossi successo perché si otterrà l'output:

CREATE DATABASE 

8) Chiudere lo postgres shell:

\q 

9) Ora il momento della verità:

$ RAILS_ENV=development rake db:migrate 

Se si ottiene questo:

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

Congratulazioni, postgres è perfettamente funzionante con la tua applicazione.

9a) Sul mio computer locale, ho ricevuto un errore di autorizzazione. Non ricordo esattamente, ma è stato un errore lungo le linee di

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

Anche se vorrei consigliare a pensare molto attentamente a ricorsivamente impostazione privaledges scrittura su una macchina di produzione, a livello locale, ho dato tutta la mia app di lettura privilegi di scrittura come questo:

9b) Salite un livello di directory:

$ cd .. 

9c) Impostare i permessi della directory my_application e tutti i suoi contenuti a 666:

$ chmod -R 0666 my_application 

9d) ed eseguire di nuovo la migrazione:

$ RAILS_ENV=development rake db:migrate 

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

Alcuni suggerimenti e trucchi se letame

provare questi prima di riavviare tutti questi passaggi:

Il mynewusername l'utente non ha i privilegi di CRUD per il database my_app_development? Eliminare il database e creare di nuovo con mynewusername come il proprietario:

1) avviare la shell postgres:

$ psql 

2) eliminare il database my_app_development. Stai attento! Drop significa cancellare completamente!

postgres=# DROP DATABASE my_app_development; 

3) Ricreare un altro my_app_development e rendere mynewusername il proprietario:

postgres=# CREATE DATABASE my_application_development OWNER mynewusername; 

4) Uscire dalla shell:

postgres=# \q 

L'utente mynewusername non può accedere al database?Pensi di aver scritto la password sbagliata nello YAML e non riesci a ricordare la password che hai inserito usando la shell di Postgres? È sufficiente modificare il ruolo con la password YAML:

1) Apri la tua YAML, e copiare la password negli appunti:

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

2) Avviare lo postgres shell:

$ psql  

3) Aggiorna la password di mynewusername. Incollare la password, e ricordarsi di mettere le virgolette singole attorno ad esso:

postgres=# ALTER ROLE mynewusername PASSWORD `musthavebeenverydrunkwheniwrotethis`; 

4) Uscire dalla shell:

postgres=# \q 

Tentativo di connessione a localhost tramite un visualizzatore di database come Dbeaver, e don sapere qual è la password dell'utente postgres? Modificare in questo modo:

1) Eseguire passwd come superutente:

$ sudo passwd postgres 

2) Immettere la password conti sudo (niente a che fare con Postgres):

[sudo] password for starkers: myaccountpassword 

3) Crea nuovo passwod l'account del Postgres:

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

Ottenere questo messaggio di errore ?:

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) È necessario dare il vostro utente la possibilità di creare database. Dalla shell psql:

ALTER ROLE thisismynewusername WITH CREATEDB 
+0

Vorrei poterti dare più +1 s per questa brillante soluzione, sarei ancora più felice se funzionasse per me. ancora brillante risposta. domanda veloce, sono quei backtick intorno alla password in un ruolo diverso? inoltre, non è necessario utilizzare i backtick in precedenza? –

+0

@ MikeH-R Grazie, peccato che non funzioni per te! Sei sicuro che il tuo YAML rilevante abbia 'host: localhost'? Questo è stato il vero trambusto per me. Intorno alla password hai bisogno di virgolette singole. Sulla mia tastiera è 'shift' +' @ '. Con la shell psql hai solo bisogno di virgolette singole intorno ad alcuni parametri. Hai bisogno di loro attorno alla password, e ** non ** intorno al nome del ruolo, per esempio.È molto difficile essere onesti, ma va bene una volta che sai che sono sfumature :) – Starkers

+0

@ MikeH-R Ho modificato la mia risposta per rendere le cose più chiare. Prendi in considerazione un'altra crepa! – Starkers

28

Per soluzione permanente:

Il problema è con il vostro pg_hba. Questa linea:

local all    postgres        peer 

Dovrebbe essere

local all    postgres        md5 

quindi riavviare il server PostgreSQL dopo aver cambiato questo file.

Se siete su Linux, il comando sarebbe

sudo service postgresql restart 
0

Se si ottiene che il messaggio di errore (Peer authentication failed for user (PG::Error)) durante l'esecuzione di test di unità, assicurarsi che esista il database di test.

6

Stavo affrontando lo stesso problema su macchina Ubuntu quindi ho rimosso questo errore seguendo alcuni passaggi. Passa a utente postgres

$ sudo su - postgres

vi chiederà la password e la password di default è postgres

Dopo l'accensione l'utente postgres, console psql aperto

$ psql 

quindi verificare la versione di postgres se sono disponibili più versioni

psql=# select VERSION(); 

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

ora aperto postgres user

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

9.1 è il comando superiore apposito formulario versione

e sostituire

local all    postgres        peer 

a

local all    postgres        md5 

sudo service postgresql restart

scrivo passi sul mio blog anche

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

+0

Hai dato la risposta giusta, hai perso solo una cosa che non è necessario controllare la versione. È possibile modificare la password eseguendo questo comando dopo psql Modifica utente "nome utente" imposta password 'xyz'; – vishu

+0

Ricorda che l'autenticazione 'md5' richiede una password non nullo per l'utente del tuo database (è appena stata presa da quello oggi mentre cercava di massimizzare la pigrizia durante la creazione di un'applicazione Rails). –

5

si può andare al file /var/lib/pgsql/data/pg_hba.conf e aggiungere la fiducia al posto di Ident E ' ha funzionato per me

local all all trust 
host all 127.0.0.1/32 trust 

Per ulteriori dettagli si riferiscono a questo problema Ident authentication failed for user

+0

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

Problemi correlati