Подключение к базе данных на Heroku - PullRequest
15 голосов
/ 08 сентября 2011

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

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'

Похоже, Героку не нравится мой 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 Ответ

27 голосов
/ 08 сентября 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...