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

Ничего себе, я застрял на этом в течение нескольких дней. У меня проблемы с подключением к database.yml на Heroku. У меня стоит Кедр и рубин 1.9.2. Моя база данных dev и test — sqlite3, а база данных prod — 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'

Похоже, Heroku не нравится моя база данных.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

person PEF    schedule 08.09.2011    source источник
comment
Вам когда-нибудь удавалось подключиться к базе данных? Ответ, похоже, не включает в себя полное решение для подключения.   -  person baash05    schedule 20.02.2013


Ответы (1)


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

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

person yfeldblum    schedule 08.09.2011
comment
Итак, если я хочу сохранить общую БД Heroku в рабочей среде, я просто удаляю три строки выше и позволяю Heroku управлять БД самостоятельно. Спасибо! - person PEF; 08.09.2011
comment
Правильный. Если вы хотите использовать аддон Heroku postgres (общие и выделенные базы данных через Heroku), ничего не делайте. Если вы хотите использовать надстройку Amazon RDS, также ничего не делайте. Оба этих дополнения устанавливают переменную конфигурации DATABASE_URL вашего приложения, которую config/database.yml анализирует Heroku. Если вы хотите использовать свой собственный сервер базы данных, вы должны установить переменную конфигурации DATABASE_URL вашего приложения так, чтобы она указывала на ваш собственный сервер базы данных, и вы не должны трогать свой config/database.yml. - person yfeldblum; 08.09.2011
comment
Если вы хотите увидеть, что геройку помещает в ваш config/database.yml, просто запустите геройку, запустите bash и выполните команду config/database.yml ;) - person Christopher Lindblom; 15.07.2012
comment
У меня тоже сейчас эта проблема. строка 17 файла config/database.yml — adapter = uri.scheme. Я думаю, что файл database.yml, который пишет Heroku, не работает. - person Dave Sag; 26.08.2012
comment
См. также этот другой пост SO: title="heroku, что означает запись yml базы данных конфигурации для чтения из URL-адреса базы данных"> stackoverflow.com/questions/12379530/ - person Philippe Monnet; 22.11.2012
comment
У меня та же проблема, и я не понимаю... почему, черт возьми, он подключается к секретной подземной базе данных, а не к той, о которой я ему говорю... извините, но это нехорошо =S - person mariowise; 06.08.2014
comment
@yfeldblum Ваша ссылка на переменные конфигурации не работает. Просто решил предупредить тебя. - person Jake; 29.06.2018