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
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 Error en la autenticación de identidades para el usuario
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.