Не удается подключиться к базе данных PostgreSQL на Heroku с помощью Ruby — не удалось перевести имя хоста

Я использую Ruby (не Rails) и подключаю базу данных PostgreSQL. Я пытался настроить Heroku, но у меня возникли проблемы с запуском приложения. Запуск приложения локально работает нормально.

Мой локальный .env выглядит так:

postgres://DATABASE_URL=localhost

И подключение Ruby для подключения к базе данных выглядит так:

@@db = PGconn.open(:hostaddr => ENV['DATABASE_URL'], :dbname => '(dbname)', :password => '(password)')

Когда я нажимаю на Heroku, приложение падает в этой строке и записывает эту ошибку в журналы:

could not translate host name "postgres://(my heroku db address)" to address: Name or service not known (PG::Error)

Адрес базы данных там совпадает с DATABASE_URL в моем heroku:config. Я использую общую базу данных.

Я пытался использовать :host => ENV['DATABASE_URL'] (в отличие от :hostaddr), но получил тот же результат. Я предполагаю, что мне не хватает чего-то простого, но у меня не было хороших идей.


person Alex Ghiculescu    schedule 08.07.2012    source источник
comment
Я не решаюсь публиковать адрес базы данных heroku, потому что он содержит имя пользователя и пароль. Он имеет формат postgres://(foo)@(bar).compute-1.amazonaws.com/ddnhsdgpcy.   -  person Alex Ghiculescu    schedule 08.07.2012


Ответы (2)


Вам нужно разобрать определенные части файла DATABASE_URL. См. https://devcenter.heroku.com/articles/rack#database_access.

person Will    schedule 08.07.2012

Похоже, что Heroku Devcenter больше не включает это, поэтому вот как выполнить разделение вручную:

  db_parts = ENV['DATABASE_URL'].split(/\/|:|@/)
  username = db_parts[3]
  password = db_parts[4]
  host = db_parts[5]
  db = db_parts[7]
  conn = PGconn.open(:host =>  host, :dbname => db, :user=> username, :password=> password)

Предоставлено Grio.

person lambshaanxy    schedule 23.02.2014