ローカルのpostgresデータベースで「rake test」を実行しようとすると、上記の例外がスローされます。
Pg_hba.confファイルは次のとおりです。
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all username peer
local myapp_dev myapp md5
local myapp_test myapp md5
local myapp_prod myapp md5
#local all all peer
# IPv4 local connections:
Host all all 127.0.0.1/32 md5
# IPv6 local connections:
Host all all ::1/128 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local replication postgres peer
#Host replication postgres 127.0.0.1/32 md5
#Host replication postgres ::1/128 md5
ここに私のdatabase.ymlの関連セクションがあります
test:
adapter: postgresql
database: myapp_test
pool: 5
timeout: 5000
Host: localhost
username: username
password:
実際のdatabase.ymlでは、「username」はログインしている実際のユーザー名に置き換えられます。認証方法は「ピア」として定義されているため、パスワードは不要です。
また、Postgresを再起動するように注意しました
Sudo -u postgres pg_ctlcluster 9.3 main restart
ここに他に何が欠けていますか?
ホストとしてのlocalhost
はTCP接続を参照します。つまり、認証方法はmd5
ごとにpg_hba.conf
(パスワードが必要)]になります。
#IPv4ローカル接続: すべての127.0.0.1/32 md5 #IPv6ローカル接続すべてをホスト: すべてすべて:: 1:128 md5
peer
メソッドを取得するには、Unixドメインソケットを介して接続する必要があります。また、debianライクなOSを使用しているように見えるため、Host
フィールドに/var/run/postgresql
を入力するか、環境変数で特に指定されていない限り、これがデフォルトです)。
編集:データベースURI( http://weblog.rubyonrails.org/2014/4/8/Rails-4-1/ で発表されたRails-4.1以降でサポートされている)を使用する場合、構文はされる:
ローカルホストの場合:test: "postgresql://localhost/myapp_test"
デフォルトのUnixソケットドメインの場合(ホストフィールドは空のまま):test: "postgresql:///myapp_test"
以下のようにコードを変更すると動作します
pg_hba.conf:
# IPv4 local connections:
Host all all 127.0.0.1/32 trust
# IPv6 local connections:
Host all all ::1/128 trust
その説明の下:
信頼
無条件で接続を許可します。この方法により、PostgreSQLデータベースサーバーに接続できるすべてのユーザーが、パスワードやその他の認証を必要とせずに、希望するPostgreSQLユーザーとしてログインできます。
md5
クライアントが認証のためにダブルMD5ハッシュパスワードを提供することを要求します。
詳細については こちら
パスワードを強制するためにhb_confがすでに変更されている場合は、開発環境とテスト環境の両方でRailsアプリのデータベース構成にパスワードが含まれていることを確認してください。
default: &default
adapter: postgresql
encoding: unicode
pool: 5
Host: localhost
username: your_user
password: your_password
development:
<<: *default
database: your_db_development
test:
<<: *default
database: your_db_test
production:
url: <%= ENV['DATABASE_URL'] %>
テストデータベースのパスワードを指定できなかったときに、このエラーが発生していました。
Postgresアプリを使用しています。 database.ymlのデフォルト部分にユーザー名とパスワードを入力する必要がないため、これは本当に素晴らしいことです。
database.yml
default: &default
adapter: postgresql
encoding: unicode
pool: <%= ENV.fetch("Rails_MAX_THREADS") { 5 } %>
development:
<<: *default
database: my-app_development
test:
<<: *default
database: my-app_test
production:
<<: *default
database: my-app_production
username: my-app
password: <%= ENV['MY-APP_DATABASE_PASSWORD'] %>
私の問題:私はパスを変更し、postgresを動作させることができませんでした。
Solution: documentation を使用して:
1)アプリをアンインストールします
2)この answer を使用してpostgresプロセスを停止します。これは、Sudo pkill -u postgres
3)アプリを再インストールして起動する
これですべてがうまくいくはずです。素晴らしい一日を!
注:これを行うことで問題も解決しますPostgres.app port 5432 in use
私もこの質問に出会いました。データベース構成、/ var/www/myproject/shared/config/database.yml、production: adapter: postgresql pool: 5 timeout: 5000 encoding: utf8 Host: localhost database: myproject username: myname password: <%= ENV['name_DATABASE_PASSWORD'] %>
最後の段落が間違っていることがわかりました、正しいコードは
password: <%= ENV['myproject_DATABASE_PASSWORD'] %>