ruby-on-rails-3 postgresql ruby-on-rails-3.1 ubuntu-11.10

ruby on rails 3 - Rails 3.2, FATAL: Error de autenticación de pares para el usuario(PG:: Error)



ruby-on-rails-3 postgresql (6)

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 creé 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


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

1) Crear la aplicación Rails con postgres YAML y la gema ''pg'' en el Gemfile:

$ rails new my_application -d postgresql

2) Dale un poco de 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 los rails 4.0.1 la opción -d postgresql 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 parámetro de la database es para una base de datos que aún no termina, y el username y la password son credenciales para una función que tampoco existe. ¡Los crearemos más adelante!

Así es como config/database.yml debería verse (no es una pena en el 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 obtener este error si su usuario actual (como su usuario de la computadora) no tiene una función de postgres de administración correspondiente.

psql: FATAL: role "your_username" does not exist

Ahora solo he instalado 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 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 la sección de desarrollo de config/database.yml :

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

Ahora, hay algunas sutilezas aquí, así que repasémoslas.

  • El nombre de usuario de la función, thisismynewusername , no tiene citas de ningún tipo a su alrededor
  • Especifique la palabra clave LOGIN después de WITH . 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 comillas dobles
  • Agregue un punto y coma al final;)

Deberías ver esto en tu terminal:

postgres=# CREATE ROLE postgres=#

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

7) Ahora, todavía en el shell postgres, necesitamos crear la base de datos con el nombre que establecemos en el 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 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) ========================================

Felicidades, postgres funciona a la perfección con tu aplicación.

9a) En mi máquina local, recibí 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 cuidadosamente sobre la configuración recursiva de los permisos de escritura en una máquina de producción, localmente, le di a toda la aplicación privilegios de lectura y escritura de esta manera:

9b) Subir 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 ejecutar la migración nuevamente:

$ RAILS_ENV=development rake db:migrate == CreateCats: migrating ================================================= -- create_table(:cats) -> 0.0028s == CreateCats: migrated (0.0028s) ========================================

Algunos consejos y trucos si desorientas

Pruebe esto antes de reiniciar todos estos pasos:

¿El usuario mynewusername no tiene privilegios para CRUD en la base de datos my_app_development ? Suelta la base de datos y créela nuevamente con mynewusername como propietario:

1) Inicie el shell postgres:

$ psql

2) my_app_development base de datos my_app_development . ¡Ten cuidado! Drop significa eliminar por completo!

postgres=# DROP DATABASE my_app_development;

3) Recrear otro my_app_development y hacer mynewusername el propietario:

postgres=# CREATE DATABASE my_application_development OWNER mynewusername;

4) Salga del shell:

postgres=# /q

El usuario mynewusername no puede 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 modifique el rol con la contraseña de YAML:

1) Abre tu YAML y copia la contraseña en tu 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) Actualice la contraseña de mynewusername . Pegue la contraseña y recuerde poner comillas simples alrededor de ella:

postgres=# ALTER ROLE mynewusername PASSWORD `musthavebeenverydrunkwheniwrotethis`;

4) Salga del shell:

postgres=# /q

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

1) Ejecute passwd como superusuario:

$ sudo passwd postgres

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

[sudo] password for starkers: myaccountpassword

3) Crear la nueva contraseña de la cuenta de postgres:

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

¿Recibo 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 dar a su usuario la capacidad de crear bases de datos. Desde el shell psql:

ALTER ROLE thisismynewusername WITH CREATEDB


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á una 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 múltiples 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 devolución de versión

y reemplazar

local all postgres peer

a

local all postgres md5

sudo service postgresql restart

También escribo pasos en mi blog

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


Para una 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



Si instaló postresql en su servidor, solo tiene que hospedar: localhost en database.yml, normalmente lo incluyo en el pool: 5. De lo contrario, si no es localhost, dígale a 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 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 ejecutar:

sudo -u postgres psql

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

postgres=# /password

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

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

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


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