2012-04-03 43 views
124

Me postulo mi desarrollo en Ubuntu 11.10, y RubyMineRails 3.2, FATAL: Peer autenticación falló para el usuario (PG :: Error)

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

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

cuando trato de ejecutar la aplicación, me sale este error a continuación, parece que no he creado un usuario 'proyecto' todavía, pero, ¿cómo puedo crear un usuario y darle 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/[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

Creo que he encontrado algo aquí http://xtremekforever.blogspot.com/2011/05/setup-rails-project-with-postgresql- on.html – simo

Respuesta

269

Si ha instalado PostgreSQL en su servidor a continuación, sólo host: localhost a database.yml, por lo general tirar en torno a la piscina, donde dice: 5. De lo contrario, si no es localhost definitivamente decir que la 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 se establecen correctamente mediante la creación de una base de datos y asignar la propiedad al usuario de su aplicación para establecer la conexión. Para crear un nuevo usuario en PostgreSQL 9 discurren:

sudo -u postgres psql 

establecer la contraseña de usuario PostgreSQL si no es así, es sólo la contraseña barra invertida.

postgres=# \password 

Crear un nuevo usuario y contraseña y 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 actualizar el archivo database.yml después de que haya confirmado la creación de la base de datos, usuario, contraseña y configurar estos privilegios. No olvide host: localhost.

+2

si aún tiene problemas para iniciar sesión y completar la conexión a través de localhost, luego vuelva a postgresql a través del terminal y aplique algunas de estas 8.2 convenciones para establecer los privilegios de su usuario de conexión, la sintaxis es GRANT ALL ON DATABASE [dbname] to [ usrname]. Esta sintaxis funciona en psql 9+ de la misma manera, pero probablemente solo pueda alternar permisos en bases de datos propiedad del usuario antes de otorgar GRANT ALL: http://www.postgresql.org/docs/8.2/static/sql-grant. html –

+28

'host: localhost' y' pool: 5' faltaban en mi configuración. Después de agregarlos, el error desapareció. –

+17

Para mí 'host: localhost' faltaba. después de que agregué eso, todo funcionó. Esto está en Ubuntu 13.04 – Jesse

49

Ésta es la manera más infalible para obtener su aplicación rieles trabajar con Postgres en el entorno de desarrollo en Ubuntu 13.10.

1) Crear carriles de aplicación con postgres YAML y joya 'pg' en el Gemfile:

$ rails new my_application -d postgresql 

2) darle un poco de funcionalidad CRUD. Si acaba de ver si funciona postgres, crear un andamio:

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

3) A partir de rails 4.0.1 la opción -d postgresql genera un YAML que no incluya un parámetro de acogida. Encontré que necesitaba esto. Editar la sección de desarrollo y crear los siguientes parámetros:

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

Nota database el parámetro es para una base de datos que no sale todavía, y el username y password son las credenciales para un papel que no existe tampoco. ¡Los crearemos más adelante!

Así es como config/database.yml debe buscar (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) Iniciar el postgres shell con este comando:

$ psql 

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

psql: FATAL: role "your_username" does not exist 

postgres Ahora sólo he instalado una vez, así que puede estar equivocado, pero creo que Postgres crea automáticamente una función de administración con las mismas credenciales que el usuario haya instalado postgres como.

4b) Así que esto significa que es necesario cambiar al usuario que ha instalado postgres utilizar el comando psql e iniciar el shell:

$ sudo su postgres 

Y a continuación, ejecutar

$ psql 

5) Usted' ll sabe que está en los postgres shell debido a su terminal se verá así:

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

postgres=# 

6) Usando la sintaxis de PostgreSQL, vamos a crear el usuario que se especifica en la sección desarrolloconfig/database.yml 's:

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

Ahora, hay algunas sutilezas aquí, así que vamos a ir sobre ellos.

  • nombre de usuario de la función, thisismynewusername, no tienen cotizaciones de cualquier naturaleza a su alrededor
  • especificar el keyword después de la CON. Si no lo hace, la función seguirá siendo creada, ¡pero no podrá iniciar sesión en la base de datos!
  • La contraseña del rol, thisismynewpassword, debe estar entre comillas simples. No hay comillas dobles.
  • Añadir un punto y coma en el extremo;)

Debe ver esto en su terminal:

postgres=# 
CREATE ROLE 
postgres=# 

Eso significa, "PAPEL creó", pero alerta Postgres parecen adoptar la misma convenciones imperativas de git hub.

7) Ahora, todavía en el shell postgres, necesitamos crear la base de datos con el nombre que hemos establecido en el YAML.Hacer que el usuario que hemos creado en el paso 6 su dueño:

postgres=# CREATE DATABASE my_application_development OWNER thisismynewusername; 

Usted sabrá si tuvieron éxito porque obtendrá la salida:

CREATE DATABASE 

8) Dejar de los postgres Shell:

\q 

9) Ahora el momento de la verdad:

$ RAILS_ENV=development rake db:migrate 

Si recibe este:

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

Felicidades, postgres está funcionando perfectamente con su aplicación.

9a) En mi máquina local, recibí un error de permiso. No recuerdo con exactitud, pero se ha producido un error en la línea de

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

Aunque te aconsejo pensando muy cuidadosamente acerca de la configuración de forma recursiva privaledges de escritura en una máquina de producción, a nivel local, le di toda mi lectura de aplicaciones privilegios de escritura como esta:

9b) Sube un nivel de directorio:

$ cd .. 

9c) Establecer los permisos del directorio my_application y todo su contenido a 666:

$ chmod -R 0666 my_application 

9d) y ejecute de nuevo 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 la suciedad encima

Prueba estas antes de reiniciar todos estos pasos:

El mynewusername usuario no tiene privilegios para CRUD a la base de datos my_app_development? La caída de la base de datos y crear de nuevo con mynewusername como el propietario:

1) Inicie el Shell de postgres:

$ psql 

2) La caída de la base de datos de my_app_development. ¡Ten cuidado! Drop significa eliminar por completo!

postgres=# DROP DATABASE my_app_development; 

3) Volver a crear otra my_app_development y hacer mynewusername el propietario:

postgres=# CREATE DATABASE my_application_development OWNER mynewusername; 

4) Salir del shell:

postgres=# \q 

El usuario mynewusername no pueden iniciar sesión en la base de datos?¿Crees que escribiste la contraseña incorrecta en el YAML y no recuerdas la contraseña que ingresaste utilizando el shell postgres? Simplemente alterar el papel con la contraseña YAML:

1) Abra su YAML, y copia la contraseña en el 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) Iniciar el postgres Shell:

$ psql  

3) Actualice la contraseña de mynewusername. Pegar en la contraseña, y recuerda que poner entre comillas simples:

postgres=# ALTER ROLE mynewusername PASSWORD `musthavebeenverydrunkwheniwrotethis`; 

4) para salir del entorno:

postgres=# \q 

Tratando de conectarse al servidor local a través de un visor de bases de datos como Dbeaver, y don ¿Sabes cuál es la contraseña de usuario de tu postgres? Cambiará como sigue:

1) Ejecutar passwd como superusuario:

$ sudo passwd postgres 

2) Introduzca su contraseña de cuentas de 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 

Conseguir 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) Es necesario dar a su usuario la posibilidad de crear bases de datos. Desde el shell de psql:

ALTER ROLE thisismynewusername WITH CREATEDB 
+0

Ojalá pudiera darle más +1 s por esta brillante solución, estaría aún más feliz si me funcionara. aún brillante respuesta. pregunta rápida, ¿esos backticks alrededor de la contraseña están alterados? Además, no es necesario que uses retrocesos anteriormente ¿verdad? –

+0

@ MikeH-R Gracias, ¡lástima que no funcione para usted! ¿Estás seguro de que tu YAML relevante tiene 'host: localhost'? Esa fue la verdadera idea para mí. Alrededor de la contraseña necesita comillas simples. En mi teclado eso es 'shift' +' @ '. Con el shell psql solo necesitas comillas simples para algunos parámetros. Los necesita alrededor de la contraseña, y ** no ** alrededor del nombre de la función, por ejemplo.Es muy complicado ser honesto, pero está bien una vez que sabes que son matices :) – Starkers

+0

@ MikeH-R He modificado mi respuesta para aclarar las cosas. ¡Considera tener otra oportunidad! – Starkers

28

Para la solución permanente:

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

local all    postgres        peer 

Debe ser

local all    postgres        md5 

reinicie el servidor PostgreSQL después de cambiar este archivo.

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

sudo service postgresql restart 
0

Si recibe el mensaje de error (Peer authentication failed for user (PG::Error)) cuando se ejecutan las pruebas de unidad, asegúrese de que existe la base de datos de prueba.

6

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

$ sudo su - postgres

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

Una vez encendido el usuario postgres, la consola psql abierta

$ psql 

a fin de comprobar 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 la versión formulario de devolución de mando superior

y reemplazar

local all    postgres        peer 

a

local all    postgres        md5 

sudo service postgresql restart

escribo pasos en mi blog también

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

+0

Ha dado la respuesta correcta, solo olvidó una cosa: no necesita verificar la versión. Puede cambiar la contraseña ejecutando este comando después de psql Modificar usuario "nombre de usuario" establecer contraseña 'xyz'; – vishu

+0

Recuerde que la autenticación 'md5' requiere una contraseña que no sea nula para el usuario de la base de datos (hoy día, al intentar maximizar la pereza al crear una aplicación de Rails). –

5

se puede ir a su archivo /var/lib/pgsql/data/pg_hba.conf y añadir la confianza en lugar de Ident Se trabajó para mi.

local all all trust 
host all 127.0.0.1/32 trust 

Para más detalles, se refieren a este tema Ident authentication failed for user

+0

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

Cuestiones relacionadas