Совместное использование базы данных двумя приложениями в Heroku - PullRequest
86 голосов
/ 12 мая 2011

Я хочу получить доступ к базе данных приложения из другого приложения Heroku. Возможно ли это в общей базе данных?

Ответы [ 6 ]

96 голосов
/ 12 мая 2011

ОБНОВЛЕНО

Первоначально, в этом ответе говорилось, что хотя это было возможно с помощью нескольких уловок, это было решительно обескураженным. Это было основано на рекомендациях на сайте поддержки разработчиков 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 для удаленного доступа к данным. Мое личное мнение таково, что в целом для многих ситуаций это хороший совет (т. Е. Лучше, чем просто подключение нескольких приложений к одной и той же БД), хотя я могу видеть ситуации, когда это будет больше проблем, чем стоит.

UPDATE

Что касается комментариев к этому ответу, стоит отметить, что Heroku оставляет за собой право изменять URL-адреса базы данных по мере необходимости. Если это произойдет, это приведет к сбою вторичных подключений, и вам необходимо соответствующим образом обновить URL-адреса.

74 голосов
/ 31 января 2015

Последний ответ на соответствующий вопрос!

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

15 голосов
/ 12 мая 2011

Насколько я знаю, это возможно - вам нужно будет просмотреть переменные конфигурации heroku для вашего приложения с БД, а затем установить для database_url приложение, которое хочет использовать базу данных, на такое же значение.Хотя и не в курсе, насколько он поддерживается, я не знаю.

РЕДАКТИРОВАТЬ Просто чтобы успокоиться, я развернул два приложения на Heroku - простой эшафот'post' с заголовком.

http://evening -spring-734.heroku.com / posts является мастером

http://electric -galaxy-230.heroku.com/posts - это раб

Таким образом, созданные сообщения будут записаны в URL базы данных вечером-весны-734.

Все, что я сделалэто использовать heroku config, чтобы получить DATABASE_URL вечером-весны-734, а затем установить то же значение в DATABASE_URL из electric-galaxy-230.

Вы можете столкнуться с некоторыми бесплодными условиями гонки DB, но это определенноможно сделать.

Волшебство да?

12 голосов
/ 16 июля 2011

Я недавно получил это в новостной рассылке Heroku. Я отправляю их по электронной почте, чтобы узнать, действительно ли это одобренное использование.

ЗНАЕТЕ ЛИ ВЫ?

Совместное использование одной базы данных со многими приложениями

Знаете ли вы, что приложения Heroku могут совместно использовать общую базу данных? Например, вы можете поместить аналитические функции в отдельное приложение от вашего пользовательского кода.

Просто установите DATABASE_URL config var для нескольких приложений на одно и то же значение. Сначала получите 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.

Вот и все - теперь оба приложения будут использовать одну базу данных.

7 голосов
/ 13 мая 2011

Плагин Amazon RDS хорошо работает для этого.Несколько приложений могут совместно использовать один и тот же экземпляр RDS.

Вы можете использовать их для совместного использования таблиц или избежать конфликта имен таблиц с помощью active_record.table_name_prefix.

1 голос
/ 15 сентября 2012

См. Справочник Heroku: https://devcenter.heroku.com/categories/heroku-postgres

В: Может ли несколько приложений Heroku подключаться к одной базе данных?

Да.Вы можете настроить несколько приложений, работающих на Heroku, для подключения к одной базе данных при условии, что у вас есть учетные данные базы данных.Просто переопределите DATABASE_URL приложений, которые вы хотите подключить, используя конфигурацию heroku: добавьте команду DATABASE_URL = ....

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