Подтвердить что ты не робот

PG:: ConnectionBad: fe_sendauth: пароль не указан

Когда я пытаюсь запустить "rake test" в локальной базе данных postgres, он выдает исключение выше.

Вот мой файл pg_hba.conf:   # Вход администратора базы данных через сокет Unix   local all postgres peer

# 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

и вот соответствующий раздел из моей базы данных .yml

test:

adapter: postgresql
database: myapp_test
pool: 5
timeout: 5000
host: localhost
username: username
password:

В реальной базе данных .yml "имя пользователя" заменяется моим фактическим именем пользователя, в которое я вошел в систему. Поскольку метод аутентификации определяется как "peer", пароль не требуется.

Я также позаботился о перезапуске Postgres

sudo -u postgres pg_ctlcluster 9.3 main restart

Что еще мне не хватает?

4b9b3361

Ответ 1

localhost в качестве хоста ссылается на TCP-соединение, что означает метод auth md5 (требуется пароль) для вашего pg_hba.conf:

# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

Чтобы использовать peer метод, вам необходимо подключиться через доменные сокеты Unix, и, поскольку вы, похоже, используете ОС, похожую на debian, это означает, что вы должны поместить /var/run/postgresql в поле host или вообще ничего (это значение по умолчанию, если переменные среды не говорят иначе).

РЕДАКТИРОВАТЬ: при использовании URI базы данных (поддерживается начиная с Rails-4.1, как было объявлено в http://weblog.rubyonrails.org/2014/4/8/Rails-4-1/), синтаксис может быть:

  • для локального хоста:
    test: "postgresql://localhost/myapp_test"

  • для домена сокета Unix по умолчанию (поле хоста оставлено пустым):
    test: "postgresql:///myapp_test"

Ответ 2

Измените код, как показано ниже, и он будет работать

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 для аутентификации.

обратитесь к более здесь

Ответ 3

Если ваш 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'] %>

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

Ответ 4

Я тоже встретил этот вопрос. Я проверил конфигурацию своей базы данных, /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'] %>

Ответ 5

Я использую приложение 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.

Решение: используйте документацию для:

1) удалить приложение

2) Остановите процесс postgres, используя этот ответ, в котором говорится, что использовать sudo pkill -u postgres

3) Переустановите и запустите приложение

Теперь все должно работать нормально, хорошего дня!

Примечание. Это также решает проблему использования порта 5432 в Postgres.app.