Can't connect to PostgreSQL database on Heroku using Ruby - could not translate host name

孤街浪徒 提交于 2019-12-12 08:42:09

问题


I'm using Ruby (not Rails) and connecting a PostgreSQL database. I've been trying to get set up on Heroku, but I'm having problems starting the application. Running the application locally works fine.

My local .env looks like:

postgres://DATABASE_URL=localhost

And the Ruby connect to connect to the database looks like:

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

When I push to Heroku the app crashes on that line, and writes this error to the logs:

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

The database address there matches the DATABASE_URL in my heroku:config. I'm using a shared database.

I tried using :host => ENV['DATABASE_URL'] (as opposed to :hostaddr) but had the same result. I'm guessing there's something simple I'm missing but I haven't had any good ideas.


回答1:


You need to parse out the specific parts of the DATABASE_URL. Please see https://devcenter.heroku.com/articles/rack#database_access




回答2:


Heroku's Devcenter doesn't appear to include this anymore, so here's how to do the split manually:

  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)

Courtesy Grio.



来源:https://stackoverflow.com/questions/11380438/cant-connect-to-postgresql-database-on-heroku-using-ruby-could-not-translate

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!