Подключение к базе данных на 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.