Rails 3.2, FATAL: Ошибка аутентификации сверстников для пользователя (PG:: Ошибка)

Я запускаю свою разработку на 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/[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

Ответ 1

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

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

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

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.

Ответ 2

Это самый надежный способ заставить ваше приложение 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 (без стыда в 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) Запустите оболочку postgres с помощью этой команды:

$ psql

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

psql: FATAL:  role "your_username" does not exist

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

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

$ sudo su postgres

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

$ psql

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

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

postgres=# 

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

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

Теперь здесь есть несколько тонкостей, поэтому отпустите их.

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

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

postgres=#
CREATE ROLE
postgres=#

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

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

postgres=# CREATE DATABASE my_application_development OWNER thisismynewusername;

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

CREATE DATABASE

8) Закройте оболочку postgres:

\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? Отбросьте базу данных и создайте ее с помощью mynewusername в качестве владельца:

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

Попытка подключиться к localhost через средство просмотра базы данных, такое как 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
ALTER ROLE thisismynewusername WITH CREATEDB

Ответ 3

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

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

local   all             postgres                                peer

Должно быть

local   all             postgres                                md5

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

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

sudo service postgresql restart

Ответ 4

Я столкнулся с той же проблемой на компьютере с 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

Ответ 6

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

development:
  adapter: postgresql
  database: database_name_here
  host: localhost
  username: user_name_here

Ответ 7

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