Rieles: FATAL - Error de autenticación de pares para el usuario (PG :: Error)

143

Estoy ejecutando mi desarrollo en Ubuntu 11.10 y RubyMine

Aquí está mi configuración de desarrollo para database.yml: que RubyMine creó para mí

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

cuando intento ejecutar la aplicación, aparece este error a continuación, parece que todavía no he creado un usuario de 'proyecto', pero, ¿cómo puedo crear un usuario y otorgarle una base de datos en postgres? Si este es el problema, entonces, ¿cuál es la herramienta recomendada para usar en Ubuntu para esta tarea? Si este no es el problema, entonces, por favor consejo.

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
simo
fuente

Respuestas:

315

Si instaló postresql en su servidor, solo aloje: localhost to database.yml, generalmente lo incluyo alrededor de donde dice pool: 5. De lo contrario, si no es localhost, definitivamente dígale a esa aplicación dónde encontrar su base de datos.

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

Asegúrese de que sus credenciales de usuario estén configuradas correctamente creando una base de datos y asignando la propiedad al usuario de su aplicación para establecer la conexión. Para crear un nuevo usuario en postgresql 9, ejecute:

sudo -u postgres psql

configura la contraseña de usuario postgresql si no lo has hecho, solo es una barra invertida.

postgres=# \password

Cree un nuevo usuario y contraseña y la nueva base de datos del usuario:

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

Ahora actualice su archivo database.yml después de haber confirmado la creación de la base de datos, el usuario, la contraseña y establezca estos privilegios. No olvides host: localhost.

Cardan Doblado
fuente
2
si todavía tiene problemas para iniciar sesión y completar la conexión a través de localhost, vuelva a postgresql a través del terminal y aplique algunas de estas convenciones 8.2 para establecer los privilegios de su usuario de conexión, la sintaxis es GRANT ALL ON DATABASE [dbname] a [usrname]. Esta sintaxis funciona igual en psql 9+, pero probablemente solo pueda alternar permisos en bases de datos propiedad del usuario antes de que OTORGUE TODOS: postgresql.org/docs/8.2/static/sql-grant.html
Bent Cardan
38
host: localhosty pool: 5faltaba en mi configuración. Después de agregarlos, el error desapareció.
Amit Patel
21
Para mí host: localhostfaltaba. después de agregar eso, todo funcionó. Esto está en Ubuntu 13.04
Jesse
77
También es importante destacar: NO OLVIDES LOS SEMICOLONES .
Maarten
Personalmente, creo que es importante poder ejecutar la configuración con rake db: setup. De lo contrario, tendrá problemas para generar un nuevo entorno de implementación, pero esta descripción funciona para un entorno de desarrollo.
Ashley Raiteri
54

Esta es la forma más infalible de hacer que su aplicación rails funcione con postgres en el entorno de desarrollo en Ubuntu 13.10.

1) Cree la aplicación de rieles con postgres YAML y gema 'pg' en el Gemfile:

$ rails new my_application -d postgresql

2) Dale alguna funcionalidad CRUD. Si solo está viendo si postgres funciona, cree un andamio:

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

3) A partir de rails 4.0.1la -d postgresqlopción, se genera un YAML que no incluye un parámetro de host. Descubrí que necesitaba esto. Edite la sección de desarrollo y cree los siguientes parámetros:

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

Tenga en cuenta que el databaseparámetro es para una base de datos que aún no sale, y las usernamey passwordson credenciales para un rol que tampoco existe. ¡Los crearemos más adelante!

Así es como config/database.ymldebe verse (sin vergüenza en 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) Inicie el shell postgres con este comando:

$ psql

4a) Puede recibir este error si su usuario actual (como en el usuario de su computadora) no tiene una función de postgres de administración correspondiente.

psql: FATAL:  role "your_username" does not exist

Ahora solo instalé postgres una vez, así que puedo estar equivocado aquí, pero creo que postgres crea automáticamente una función de administración con las mismas credenciales que el usuario que instaló postgres.

4b) Entonces, esto significa que debe cambiar al usuario que instaló postgres para usar el comando psql e iniciar el shell:

$ sudo su postgres

Y luego corre

$ psql

5) Sabrás que estás en el shell de postgres porque tu terminal se verá así:

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

postgres=# 

6) Usando la sintaxis postgresql, creemos el usuario que especificamos en config/database.ymlla sección de desarrollo :

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

Ahora, hay algunas sutilezas aquí, así que repasemoslas.

  • El nombre de usuario del rol, thisismynewusername , no tiene comillas de ningún tipo a su alrededor.
  • Especifique la palabra clave LOGIN después de WITH . Si no lo hace, el rol aún se creará, ¡pero no podrá iniciar sesión en la base de datos!
  • La contraseña del rol, thisismynewpassword , debe estar entre comillas simples. No comillas dobles .
  • Agregue un punto y coma al final;)

Deberías ver esto en tu terminal:

postgres=#
CREATE ROLE
postgres=#

Eso significa, "PAPEL CREADO", pero las alertas de postgres parecen adoptar las mismas convenciones imperativas de git hub.

7) Ahora, aún en el shell de postgres, necesitamos crear la base de datos con el nombre que configuramos en YAML. Haga que el usuario que creamos en el paso 6 sea su propietario:

postgres=# CREATE DATABASE my_application_development OWNER thisismynewusername;

Sabrá si tuvo éxito porque obtendrá el resultado:

CREATE DATABASE

8) Salga del shell de postgres:

\q

9) Ahora el momento de la verdad:

$ RAILS_ENV=development rake db:migrate

Si obtienes esto:

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

Enhorabuena, postgres funciona perfectamente con tu aplicación.

9a) En mi máquina local, seguía recibiendo un error de permiso. No puedo recordarlo exactamente, pero fue un error en la línea de

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

Aunque aconsejaría pensar con mucho cuidado sobre la configuración recursiva de escritura privada en una máquina de producción, localmente, le di a toda mi aplicación privilegios de lectura, escritura y escritura como este:

9b) Sube un nivel de directorio:

$ cd ..

9c) Establezca los permisos del directorio my_application y todos sus contenidos en 666:

$ chmod -R 0666 my_application

9d) Y vuelva a ejecutar la migración:

$ RAILS_ENV=development rake db:migrate

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

Algunos consejos y trucos si te arruinas

Pruebe estos antes de reiniciar todos estos pasos:

¿El usuario de mynewusername no tiene privilegios para CRUD en la my_app_developmentbase de datos? Descarte la base de datos y vuelva a crearla con mynewusername como propietario:

1) Inicie el shell de postgres:

$ psql

2) Descarte la my_app_developmentbase de datos. ¡Ten cuidado! ¡Drop significa eliminar por completo!

postgres=# DROP DATABASE my_app_development;

3) Recree otro my_app_developmenty haga que mynewusername sea el propietario:

postgres=# CREATE DATABASE my_application_development OWNER mynewusername;

4) Salga de la cáscara:

postgres=# \q

¿El mynewusernameusuario no puede iniciar sesión en la base de datos? ¿Crees que escribiste la contraseña incorrecta en el YAML y no puedes recordar la contraseña que ingresaste usando el shell de postgres? Simplemente modifique el rol con la contraseña de YAML:

1) Abra su YAML y copie la contraseña en su portapapeles:

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

2) Inicie el shell postgres:

$ psql    

3) Actualizar mynewusernamela contraseña. Pegue la contraseña y recuerde poner comillas simples a su alrededor:

postgres=# ALTER ROLE mynewusername PASSWORD `musthavebeenverydrunkwheniwrotethis`;

4) Salga de la cáscara:

postgres=# \q

¿Intenta conectarse a localhost a través de un visor de bases de datos como Dbeaver y no sabe cuál es la contraseña de su usuario de postgres? Cámbialo así:

1) Ejecutar passwdcomo superusuario:

$ sudo passwd postgres

2) Ingrese la contraseña de su cuenta para sudo(nada que ver con postgres):

[sudo] password for starkers: myaccountpassword

3) Crea la nueva contraseña de la cuenta de Postgres:

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

¿Recibiendo este mensaje de error ?:

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) Debe darle a su usuario la capacidad de crear bases de datos. Desde el shell psql:

ALTER ROLE thisismynewusername WITH CREATEDB
Starkers
fuente
1
Desearía poder darte más +1 s para esta brillante solución, sería aún más feliz si me funcionara Todavía brillante respuesta. pregunta rápida, ¿son esos backticks alrededor de la contraseña en alter role? además, no necesitas usar backticks antes, ¿verdad?
Mike HR
@ MikeH-R Gracias, lástima que no te funcione. ¿Estás seguro de que tu YAML relevante tiene host: localhost? Ese fue el verdadero problema para mí. Alrededor de la contraseña necesita comillas simples. En mi teclado eso es shift+ @. Con el shell psql solo necesita comillas simples alrededor de algunos parámetros. Los necesita alrededor de la contraseña y no del nombre del rol, por ejemplo. Es muy complicado ser honesto, pero está bien una vez que sabes que son matices :)
Starkers
@ MikeH-R Modifiqué mi respuesta para aclarar las cosas. ¡Considera tener otra oportunidad!
Starkers
Lo resolví ahora, gracias de nuevo por una respuesta brillante, la mayoría de las otras respuestas que encontré fueron sobre aflojar la seguridad, lo que obviamente no es bueno en la producción.
Mike HR
29

Para solución permanente:

El problema es con tu pg_hba. Esta línea:

local   all             postgres                                peer

Debiera ser

local   all             postgres                                md5

Luego reinicie su servidor postgresql después de cambiar este archivo.

Si estás en Linux, el comando sería

sudo service postgresql restart
Sumit Munot
fuente
1
¡Gracias! Esta es la verdadera respuesta.
skplunkerin
9

Estaba enfrentando el mismo problema en la máquina Ubuntu, así que eliminé este error siguiendo algunos pasos. Cambiar a usuario postgres

$ sudo su - postgres

pedirá contraseña y por defecto la contraseña es postgres

Después de cambiar el usuario a postgres, abra la consola psql

$ psql

así que verifique la versión de postgres si hay varias versiones disponibles

psql=# select VERSION();

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

Ahora abierto postgres user

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

9.1 es el comando superior del formulario de retorno de versión

y reemplazar

local   all             postgres                                peer

a

local   all             postgres                                md5

Reiniciar el servicio

sudo service postgresql restart

Escribo pasos en mi blog también

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

Tarun Garg
fuente
Ha dado la respuesta correcta, solo se perdió una cosa que no necesita verificar la versión. Puede cambiar la contraseña ejecutando este comando después de psql Alter user "username" set password 'xyz';
vishu
Recuerde que la md5autenticación requiere una contraseña no nula para el usuario de su base de datos (hoy en día se me mordió al intentar maximizar la pereza al crear una aplicación Rails).
Mark Leighton Fisher
5

Puede ir a su archivo /var/lib/pgsql/data/pg_hba.conf y agregar confianza en lugar de Ident. Funcionó para mí.

local   all all trust
host    all 127.0.0.1/32    trust

Para obtener más detalles, consulte este problema La autenticación de identidad falló para el usuario

Rastee
fuente
Centos 6.6, intente:/var/lib/pgsql/9.2/data/pg_hba.conf
Patrick
4

Agregar host: localhostfue la magia para mí

development:
  adapter: postgresql
  database: database_name_here
  host: localhost
  username: user_name_here
ispirett
fuente
0

Si recibe ese mensaje de error ( Peer authentication failed for user (PG::Error)) cuando ejecuta pruebas unitarias, asegúrese de que exista la base de datos de prueba.

David Winiecki
fuente
0

También enfrenté este mismo problema mientras trabajaba en mi entorno de desarrollo, el problema fue que dejé un host: localhostcomentario en el config/database.ymlarchivo.

Por lo tanto, mi aplicación no pudo conectarse a la base de datos PostgreSQL, simplemente descomentarlo resolvió el problema.

development:
  <<: *default
  database: database_name

  username: database_username 

  password: database_password

  host: localhost

Eso es todo.

espero que esto ayude

Promesa Preston
fuente