Подключение к базе данных на Heroku

Ничего себе, я застрял на этом в течение нескольких дней. У меня возникли проблемы с подключением к базе данных .yml на Heroku. Я на Cedar и ruby ​​1.9.2. Мой dev и test dbs - sqlite3, а prod db - postgreSQL, чтобы справляться с правилами Cedar. Вот код в моем ruby ​​ script:

Rails.env.production? ? (env = "production") : (env = "development")
dbconfig = YAML::load(File.open('config/database.yml'))[env]
ActiveRecord::Base.establish_connection(dbconfig)

Все идет хорошо на местном уровне, но когда я нажимаю на Heroku, я получаю:

ArgumentError: syntax error on line 17, col 0: `adapter = uri.scheme'
from /usr/local/lib/ruby/1.9.1/syck.rb:135:in `load'

Похоже, что Heroku не нравится моя database.yml. Вот обзор:

development:
  adapter: sqlite3
  database: db/development.sqlite3
  pool: 5
  timeout: 5000

test:
  adapter: sqlite3
  database: db/test.sqlite3
  pool: 5
  timeout: 5000

production:
  adapter: postgresql
  encoding: unicode
  database: foo
  port: 5432
  host: foobar.amazonaws.com
  username: foo
  password: bar

Ответы

Ответ 1

Во-первых, Heroku перезаписывает ваш config/database.yml с его собственной версией, специфичной для Heroku. То, как Heroku автоматически связывает ваше приложение с его собственными базами данных postgresql. Чтобы сообщить Heroku о вашей собственной базе данных posgresql, вы должны установить правильные переменные config, и вы также можете пропустить производственная база данных из вашего config/database.yml в вашем репозитории, потому что Heroku будет игнорировать ее в любом случае.

Во-вторых, файл config/database.yml является шаблоном ERB для файла YAML. Вы должны сначала запускать содержимое файла через Evaluated Ruby (ERB) перед запуском вывода через YAML.