Я хочу получить доступ к базе данных приложения из другого приложения Heroku. Возможно ли это в общей базе данных?
Ответы:
ОБНОВЛЕНО
Первоначально в этом ответе говорилось, что, хотя это возможно с помощью нескольких уловок, это категорически не рекомендуется. Это было основано на совете на сайте поддержки разработчиков Heroku. Однако недавно Heroku выпустила сообщение, в котором конкретно описывается, как этого добиться, и смягчила свои рекомендации на сайте разработчиков. Полный текст этого раздела их электронного письма приведен ниже:
Знаете ли вы, что приложения Heroku могут использовать общую базу данных? Например, вы можете поместить функции аналитики в отдельное приложение от вашего пользовательского кода.
Просто установите для переменной конфигурации DATABASE_URL одно и то же значение для нескольких приложений. Сначала получите DATABASE_URL для существующего приложения:
$ heroku config | grep DATABASE_URL --app sushi DATABASE_URL => postgres://lswlmfdsfos:5FSLVUSLLT123@ec2-123-456-78-90.compute1.amazonaws.com/ldfoiusfsf
Затем установите DATABASE_URL для новых приложений на это значение:
$ heroku config:add DATABASE_URL=postgres://lswlmfdsfos:5FSLVUSLLT123@ec2-123-456-78-90.compute-1.amazonaws.com/ldfoiusfsf --app sushi-analytics Adding config vars: DATABASE_URL => postgres://lswlm...m/ldfoiusfsf Restarting app... done, v74. That's it
- теперь оба приложения будут использовать одну базу данных.
Первоначальный совет Heroku в качестве ориентира заключался в создании и использовании API для удаленного доступа к данным. Я лично считаю, что в целом для многих ситуаций это хороший совет (т.е. лучше, чем просто подключение нескольких приложений к одной и той же БД), хотя я вижу ситуации, когда это было бы больше проблем, чем того стоит.
ОБНОВИТЬ
Согласно комментариям к этому ответу, стоит отметить, что Heroku оставляет за собой право изменять URL-адреса базы данных по мере необходимости. Если это произойдет, это приведет к сбою ваших вторичных подключений, и вам потребуется соответствующим образом обновить URL-адреса.
Поздний ответ на уместный вопрос!
Heroku теперь официально поддерживает лучшее / изящное решение посредством своей аддонной структуры. Это описано в их последнем информационном бюллетене о том, как обмениваться надстройками между приложениями. Ниже приведены фрагменты, упомянутые в описании:
$ heroku addons:attach my-sushi-db -a my-sushi-reporting --as MAIN_SUSHI_DB
Adding MAIN_SUSHI_DB to my-sushi-reporting... done
Setting MAIN_SUSHI_DB vars and restarting my-sushi-app-reporting... done, v3
Ссылка: expanding_the_power_of_add_ons
heroku addons:attach originating_app_name::HEROKU_POSTGRESQL_COLOR_URL -a no_db_app_name
насколько я знаю, это возможно - вам нужно будет посмотреть переменные конфигурации heroku для вашего приложения с БД, а затем установить database_url в приложении, которое хочет поделиться базой данных с тем же значением. Как бы то ни было, и как это поддерживается, я не знаю.
РЕДАКТИРОВАТЬ Чтобы успокоиться, я создал два приложения на Heroku - простую «публикацию» с заголовком.
http://evening-spring-734.heroku.com/posts - это мастер
http://electric-galaxy-230.heroku.com/posts - это раб
Таким образом, сообщения, созданные на любом из них, будут записаны в URL-адрес базы данных Evening-Spring-734.
Все, что я сделал, это использовал конфигурацию heroku, чтобы получить DATABASE_URL для Evening-spring-734, а затем установить то же значение в DATABASE_URL для electric-galaxy-230.
Вы могли бы закончить с некоторыми плодотворными условиями гонки БД, но это определенно возможно.
Магия, да?
Я получил это недавно в информационном бюллетене Heroku. Я отправляю им электронное письмо, чтобы узнать, действительно ли это одобренное использование.
ВЫ ЗНАЛИ?
Совместное использование одной базы данных с несколькими приложениями
Знаете ли вы, что приложения Heroku могут использовать общую базу данных? Например, вы можете поместить функции аналитики в отдельное приложение от вашего пользовательского кода.
Просто установите для
DATABASE_URL
переменной конфигурации для нескольких приложений одно и то же значение. Сначала получитеDATABASE_URL
для существующего приложения:
$ heroku config | grep DATABASE_URL --app sushi DATABASE_URL => postgres://lswlmfdsfos:5FSLVUSLLT123@ec2-123-456-78-90.compute-1.amazonaws.com/ldfoiusfsf
Затем установите
DATABASE_URL
для новых приложений это значение:
$ heroku config:add DATABASE_URL=postgres://lswlmfdsfos:5FSLVUSLLT123@ec2-123-456-78-90.compute-1.amazonaws.com/ldfoiusfsf --app sushi-analytics Adding config vars: DATABASE_URL => postgres://lswlm...m/ldfoiusfsf Restarting app... done, v74.
Вот и все - теперь оба приложения будут использовать одну базу данных.
Для этого хорошо подходит плагин Amazon RDS. Несколько приложений могут использовать один и тот же экземпляр RDS.
У вас есть гибкость, позволяющая им совместно использовать таблицы или избежать конфликта имен таблиц с помощью active_record.table_name_prefix.
См. Ссылку на Heroku: https://devcenter.heroku.com/categories/heroku-postgres
В: Могут ли несколько приложений Heroku подключаться к одной базе данных?
Да. Вы можете настроить несколько приложений, работающих на Heroku, для подключения к одной базе данных, при условии, что у вас есть учетные данные базы данных. Просто переопределите DATABASE_URL приложений, которые вы хотите подключить, используя команду heroku config: add DATABASE_URL = ...