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
Что еще мне не хватает?
Ответы
Ответ 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/), синтаксис может быть:
Ответ 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.