web-dev-qa-db-ja.com

Rails 3.2、致命的:ユーザーのピア認証に失敗しました(PG :: Error)

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
136
simo

サーバーにpostresqlをインストールし、Host:localhost to database.ymlをインストールした場合、私は通常、pool:5という場所にそれをスローします。

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を忘れないでください。

296
Bent Cardan

これはRailsアプリをdevelopment environmentでpostgresで動作させる最も確実な方法ですUbuntu 13.10。

1)Gemfileにpostgres YAMLと 'pg' gemを使用してRailsアプリを作成します。

$ Rails new my_application -d postgresql

2)いくつかのCRUD機能を提供します。 postgresが機能するかどうかだけを確認している場合は、scaffoldを作成します。

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

3)Rails 4.0.1現在、-d postgresqlオプションは、Hostパラメーターを含まない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をインストールしたユーザーと同じクレデンシャルで管理ロールを自動的に作成すると思います。

4b)つまり、psqlコマンドを使用してシェルを起動するには、postgresをインストールしたユーザーに変更する必要があります。

$ 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の後にで指定します。そうしないと、ロールは作成されますが、データベースにログインすることはできません!
  • ロールのパスワードthisismynewpasswordは、一重引用符で囲む必要があります。 二重引用符ではない
  • 最後にセミコロンを追加します;)

あなたのターミナルでこれを見るはずです:

postgres=#
CREATE ROLE
postgres=#

これは、「ロールが作成されました」という意味ですが、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)1つ上のディレクトリレベルに登る:

$ 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ユーザーはmy_app_developmentデータベースにCRUDする権限を持っていませんか?データベースを削除して、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

Dbeaverなどのデータベースビューアー経由でlocalhostに接続しようとしているが、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
52
Starkers

永続的なソリューションの場合:

問題はpg_hbaにあります。この行:

local   all             postgres                                peer

あるべき

local   all             postgres                                md5

このファイルを変更した後、postgresqlサーバーを再起動します。

Linuxを使用している場合、コマンドは

Sudo service postgresql restart
29
Sumit Munot

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

9
Tarun Garg

/var/lib/pgsql/data/pg_hba.confファイルに移動し、Ident Itの代わりに信頼を追加できます。

local   all all trust
Host    all 127.0.0.1/32    trust

詳細については、この問題を参照してください ユーザーの識別認証に失敗しました

5
Rastee

「Host:locahost」を追加することは私にとって魔法でした

development:
adapter: postgresql
database: database_name_here
Host: localhost
username: user_name_here
1
ispirett

単体テストの実行中にエラーメッセージ(Peer authentication failed for user (PG::Error))が表示される場合は、テストデータベースが存在することを確認してください。

0
David Winiecki