Я хочу отримати доступ до бази даних програми з іншої програми 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
Посилання: розширення_потужності_доданих_
heroku addons:attach originating_app_name::HEROKU_POSTGRESQL_COLOR_URL -a no_db_app_name
наскільки я знаю, це можливо - вам доведеться розглянути змінні конфігурації heroku для вашого додатка з БД, а потім встановити URL-адресу database_url у програмі, яка хоче надати спільне використання бази даних таким же значенням. Хоча це не так, і я не знаю, наскільки це підтримується.
РЕДАГУВАТИ Щоб просто роздумувати, я запустив два додатки на Heroku - простий "пост" на лісі з заголовком.
http://evening-spring-734.heroku.com/posts - головний
http://electric-galaxy-230.heroku.com/posts - це підлеглий
Тож дописи, створені на будь-якому з них, будуть записані в URL-адресу бази даних за вечір-весна-734.
Все, що я зробив, це використати конфігурацію heroku, щоб отримати DATABASE_URL veče-spring-734, а потім встановити те саме значення в DATABASE_URL електричної галактики-230.
У вас можуть виникнути деякі фруктові умови гонки DB, але це, безумовно, можливо.
Чарівна га?
Нещодавно я отримав це в бюлетені Heroku. Я надсилаю їм електронного листа, щоб з’ясувати, чи справді це дозволене використання.
ТИ ЗНАВ?
Спільний доступ до однієї бази даних із багатьма програмами
Чи знали ви, що програми Heroku можуть спільно використовувати загальну базу даних? Наприклад, ви можете розмістити функції аналітики в окремій програмі від вашого орієнтованого на користувача коду.
Просто встановіть значення
DATABASE_URL
конфігурації 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.
Ось і все - тепер обидва додатки матимуть спільну базу даних.
Для цього добре працює плагін Amazon RDS. Кілька програм можуть спільно використовувати один і той же екземпляр RDS.
Ви маєте гнучкість, щоб вони могли обмінюватися таблицями або уникати зіткнення імен таблиць, використовуючи префікс active_record.table_name_prefix.
Див. Посилання на Heroku: https://devcenter.heroku.com/categories/heroku-postgres
З: Чи можуть кілька додатків Heroku підключатися до однієї бази даних?
Так. Ви можете налаштувати кілька програм, що працюють на Heroku, для підключення до однієї бази даних, за умови, що у вас є облікові дані баз даних. Просто перевизначте DATABASE_URL програм, які ви хочете підключити, за допомогою конфігурації heroku: додайте команду DATABASE_URL = ...