#ruby-on-rails #postgresql #ubuntu #heroku
#ruby-on-rails #postgresql #ubuntu #heroku
Вопрос:
Когда я выполняю heroku db: pull, он находит мою локальную базу данных разработчика по адресу:
postgres://127.0.0.1/myapp_development?encoding=utf8
однако, как только я подтверждаю, происходит сбой с:
Sequel::DatabaseConnectionError -> PGError: fe_sendauth: no password supplied
Я попытался выполнить извлечение с указанной локальной базой данных, например
heroku db:pull postgres://root:@localhost/db_name
что выдает ту же ошибку, что и при отсутствии пароля.
Я подумал, что мне может потребоваться изменить root: на myname: потому что это пользователь, которому я предоставил права суперпользователя при настройке postgres, но ни root:, ни myname: не работают
В моем database.yml есть username: и password: пустые для всех указанных баз данных.
Из командной строки как myname @ubuntu я могу ввести psql myapp_development, нормально подключиться и запустить selects.
Чего мне здесь не хватает?
Связано ли это с моими настройками pg_hba.conf? Я заглянул внутрь, и там написано:
# Database administrative login by UNIX sockets
local all postgres ident
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all ident
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
Должен ли там использоваться «доверенный»? И если да, то нужно ли мне перезапускать postgres, если я редактирую этот файл? И если необходимо «доверие», то почему rails и инструменты командной строки psql работают без паролей при входе в систему под моим именем пользователя?
Спасибо!
Ответ №1:
Метод аутентификации trust
может помочь, но, как вы, несомненно, знаете, это небезопасно.
После редактирования pg_hba.conf
вам не нужно перезапускать. Достаточно A reload
(цитирую руководство):
pg_hba.conf
Файл считывается при запуске и когда основной серверный процесс получает сигнал SIGHUP. Если вы редактируете файл в активной системе, вам нужно будет подать сигнал почтальону (с помощьюpg_ctl
перезагрузки илиkill -HUP
), чтобы он перечитал файл.
pg_ctl reload
Смотрите Подробное руководство. Вам может понадобиться руководство для версии для 8.3. Общая база данных на heroku в настоящее время работает на PostgreSQL 8.3. (Кроме того, я сомневаюсь, что у вас есть доступ к pg_ctl на heroku.)
Имейте в виду это:
Если для пользователя не был установлен пароль, сохраненный пароль равен нулю, и аутентификация по паролю всегда будет завершаться ошибкой для этого пользователя.
Акцент мой. Возможно, вы сможете войти в систему локально, потому что auth-методы ident
или peer
позволяют это. Но для вашей цели вам может понадобиться пароль!
Комментарии:
1. Сэр, вы джентльмен и ученый. Ключевым моментом была ваша цитата о нулевых паролях, означающих, что аутентификация для пользователя всегда завершалась неудачей. Одно ИЗМЕНЕНИЕ моего суперпользователя позже, чтобы дать ему пароль, и через несколько минут я просматриваю свою недавно извлеченную базу данных из heroku локально. Спасибо.
2. @Dave: Я преклоняюсь перед вашими добрыми словами и разделяю ваш восторг. 🙂