2016-05-02 3 views
0

Если я пытаюсь соединиться с ActiveRecord в базу данных, локальный PostGreSQL со следующими параметрами соединения:ActiveRecord подключения к базе данных локального PostGreSQL в режиме доверия

ActiveRecord::Base.establish_connection(
    adapter: 'postgresql', 
    username: 'test', 
    host: 'localhost', 
    password: '123456' 
) 

Я получаю

FATAL: password authentication failed for user "test" (PG::Error) 

И с:

ActiveRecord::Base.establish_connection(
    adapter: 'postgresql', 
    username: 'test', 
    host: 'localhost' 
) 

Я получаю

fe_sendauth: no password supplied (PG::ConnectionBad) 

Моего pg_hba.conf линия:

local all    all          trust 
local all    postgres        peer 

host all    all    127.0.0.1/32   md5 
host all    all    ::1/128     md5 

Почему ActiveRecord не использует метод доверия. Я установил его для всей базы данных и всех пользователей (первая строка).

ответ

0

Уловка - это линия host: 'localhost'.

Если эта строка присутствует в параметрах соединений, драйвер попробует сделать локальное сетевое соединение, а не соединение с носками.

Так хост строки файла pg_hba.conf используются, а не местных линий. И тогда соединение правильно попросит вас ввести пароль.

Если вы удалите эту строку и соединиться с

ActiveRecord::Base.establish_connection(
    adapter: 'postgresql', 
    username: 'test' 
) 

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

Смежные вопросы