Rails 3.2, FATAL: одноранговая аутентификация для пользователя не удалась (PG :: Error) - PullRequest
136 голосов
/ 03 апреля 2012

Я работаю в Ubuntu 11.10 и RubyMine

Вот мои настройки разработки для database.yml: который RubyMine создал для меня

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

когда я пытаюсь запустить приложение, я получаю эту ошибку ниже, кажется, что я еще не создал пользователя проекта, но как я могу создать пользователя и предоставить ему базу данных в postgres? если это проблема, то какой инструмент рекомендуется использовать в Ubuntu для этой задачи? если это не проблема, то, пожалуйста, совет.

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

Ответы [ 7 ]

293 голосов
/ 12 мая 2012

Если вы установили postresql на своем сервере, то просто поместите: localhost to database.yml, я обычно добавляю его там, где говорится пул: 5. В противном случае, если это не localhost, определенно сообщите этому приложению, где найти его базу данных.

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

Убедитесь, что ваши учетные данные установлены правильно, создав базу данных и назначив право собственности на пользователя вашего приложения для установления соединения.Чтобы создать нового пользователя в postgresql 9, запустите:

sudo -u postgres psql

установите пароль пользователя postgresql, если у вас его нет, это просто пароль с обратной косой чертой.

postgres=# \password

Создайте нового пользователя и парольи новая база данных пользователя:

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

Теперь обновите файл database.yml после того, как подтвердите создание базы данных, пользователя, пароля и установите эти привилегии.Не забудьте host: localhost.

52 голосов
/ 15 ноября 2013

Это самый надежный способ заставить ваше приложение rails работать с postgres в среде разработки в Ubuntu 13.10.

1) Создайте приложение rails с postgres YAML и гемом pg в Gemfile:

$ rails new my_application -d postgresql

2) Дайте ему некоторую функциональность CRUD.Если вы просто видите, работает ли postgres, создайте каркас:

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

3) Начиная с rails 4.0.1, опция -d postgresql генерирует YAML, который не содержит параметр хоста. Я обнаружил, что мне это нужно. Отредактируйте раздел разработки и создайте следующие параметры:

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

Обратите внимание, что параметр database предназначен для базы данных, которая еще не завершается, иusername и password - учетные данные для несуществующей роли.Мы создадим их позже!

Вот как должен выглядеть config/database.yml (не стыдно при копировании: 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) Запустите оболочку postgres с помощью этой команды:

$ psql

4a) Вы можете получить эту ошибку, если у вашего текущего пользователя (как у пользователя вашего компьютера) нет соответствующей роли администратора postgres.

psql: FATAL:  role "your_username" does not exist

Теперь у меня естьтолько один раз установил postgres, поэтому я могу ошибаться, но я думаю, что postgres автоматически создает роль администратора с теми же учетными данными, что и пользователь, с которым вы установили postgres.

4b) Таким образом, это означает, что вам нужно перейти к пользователю, который установил postgres, чтобы использовать команду psql и запустить оболочку:

$ sudo su postgres

И затем запустить

$ psql

5) Вы будете знать, что находитесь в оболочке postgres, поскольку ваш терминал будет выглядеть следующим образом:

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

postgres=# 

6) Используя синтаксис postgresql, давайте создадим пользователя, которого мы указали в config/database.yml 's development section:

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

Теперь, здесь есть некоторые тонкости, так что давайте рассмотрим их.

  • Имя пользователя роли, thisismynewusername , не содержит кавычки любого вида
  • Укажите ключевое слово LOGIN после С .Если вы этого не сделаете, роль все равно будет создана, но она не сможет войти в базу данных!
  • Пароль роли, thisismynewpassword , должен быть в одномцитаты. Не двойные кавычки .
  • Добавьте точку с запятой в конце;)

Вы должны увидеть это в своем терминале:

postgres=#
CREATE ROLE
postgres=#

Это означает "ROLE CREATED", но предупреждения postgres, похоже, принимают те же императивные соглашения git hub.

7) Теперь, все еще в оболочке postgres, нам нужно создать базу данных с именем, которое мыустановить в YAML.Сделайте пользователя, которого мы создали на шаге 6, своим владельцем:

postgres=# CREATE DATABASE my_application_development OWNER thisismynewusername;

Вы узнаете, добились ли вы успеха, потому что получите вывод:

CREATE DATABASE

8) Выйдите из postgresshell:

\q

9) Теперь момент истины:

$ RAILS_ENV=development rake db:migrate

Если вы получите это:

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

Поздравляем,postgres отлично работает с вашим приложением.

9a) На моей локальной машине я получал ошибку разрешения.Я не могу вспомнить это точно, но это была ошибка в духе

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

Хотя я бы посоветовал очень внимательно подумать о рекурсивной настройке привилегий записи на рабочей машине, локально я отдал всюпривилегии чтения и записи приложения:

9b) Поднимитесь на один уровень каталога:

$ cd ..

9c) Установите права доступа к каталогу my_application и всему его содержимому 666:

$ chmod -R 0666 my_application

9d) И снова запустите миграцию:

$ RAILS_ENV=development rake db:migrate

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

Несколько советов и хитростей, если вы испортите

Попробуйте их перед повторным запуском всех этих шагов:

Пользователь mynewusername не имеет прав на CRUD для базы данных my_app_development?Удалите базу данных и создайте ее снова с именем mynewuser в качестве владельца:

1) Запустите оболочку postgres:

$ psql

2) Удалите базу данных my_app_development.Быть осторожен!Удаление означает полное удаление!

postgres=# DROP DATABASE my_app_development;

3) Создайте еще один my_app_development и сделайте mynewusername его владельцем:

postgres=# CREATE DATABASE my_application_development OWNER mynewusername;

4) Выйти из оболочки:

postgres=# \q

Пользователь mynewusername не может войти в базу данных? Кажется, вы написали неверный пароль в YAML и не можете вспомнить пароль, который вы ввели с помощью оболочки postgres? Просто измените роль с помощью пароля YAML:

1) Откройте свой YAML и скопируйте пароль в буфер обмена:

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

2) Запустите оболочку postgres:

$ psql    

3) Обновление пароля mynewusername. Вставьте пароль и не забудьте заключить его в одинарные кавычки:

postgres=# ALTER ROLE mynewusername PASSWORD `musthavebeenverydrunkwheniwrotethis`;

4) Выйти из оболочки:

postgres=# \q

Пытаетесь подключиться к локальному хосту через средство просмотра базы данных, такое как Dbeaver, и не знаете, какой пароль у вашего пользователя postgres? Измените это так:

1) Запустите passwd от имени суперпользователя:

$ sudo passwd postgres

2) Введите пароль вашей учетной записи для sudo (ничего общего с postgres):

[sudo] password for starkers: myaccountpassword

3) Создайте новый пароль для учетной записи postgres:

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

Получение этого сообщения об ошибке?:

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) Вам нужно дать своему пользователю возможность создавать базы данных. Из оболочки psql:

ALTER ROLE thisismynewusername WITH CREATEDB
29 голосов
/ 07 января 2014

Для постоянного решения:

Проблема с вашим pg_hba.Эта строка:

local   all             postgres                                peer

Должно быть

local   all             postgres                                md5

Затем перезапустите сервер postgresql после изменения этого файла.

Если вы работаете в Linux, команда будет

sudo service postgresql restart
9 голосов
/ 29 января 2015

Я столкнулся с той же проблемой на компьютере с Ubuntu, поэтому я удалил эту ошибку, выполнив несколько шагов. Переключиться на пользователя postgres

$ sudo su - postgres

запросит пароль и по умолчанию установлен пароль postgres

После переключения пользователя на postgres откройте консоль psql

$ psql

, поэтому проверьте версию postgres, если доступно несколько версий

psql=# select VERSION();

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

Сейчас открыто postgres user

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

9.1 является версией вершины из верхней команды

и заменить

local   all             postgres                                peer

до

local   all             postgres                                md5

sudo service postgresql restart

Я также пишу шаги в своем блоге

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

5 голосов
/ 20 апреля 2015

Вы можете перейти в свой файл /var/lib/pgsql/data/pg_hba.conf и добавить доверие вместо идентификатора. Это сработало для меня.

local   all all trust
host    all 127.0.0.1/32    trust

Для получения дополнительной информации обратитесь к этой проблеме Идентификация идентификатора не удалась для пользователя

1 голос
/ 20 июня 2019

Добавление "host: locahost" стало для меня волшебством

development:
adapter: postgresql
database: database_name_here
host: localhost
username: user_name_here
0 голосов
/ 28 марта 2014

Если вы получаете это сообщение об ошибке (Peer authentication failed for user (PG::Error)) при запуске модульных тестов, убедитесь, что база тестов существует.

...