web-dev-qa-db-fra.com

Partager la base de données entre 2 applications dans Heroku

Je souhaite accéder à la base de données d'une application à partir d'une autre application Heroku. Est-ce possible dans la base de données partagée?

86
donald

MIS À JOUR

À l'origine, cette réponse indiquait que même si cela était possible avec quelques astuces, c'était fortement déconseillé. Ceci était basé sur des conseils sur le site Web d'assistance aux développeurs Heroku. Cependant, récemment, Heroku a publié une communication décrivant spécifiquement comment y parvenir, et a édulcoré leurs conseils sur le site du développeur. Le texte complet de cette section de leur e-mail est inclus ci-dessous:

Saviez-vous que les applications Heroku peuvent partager une base de données commune? Par exemple, vous pouvez placer les fonctions d'analyse dans une application distincte de votre code utilisateur.

Définissez simplement la variable de configuration DATABASE_URL pour plusieurs applications sur la même valeur. Tout d'abord, obtenez la DATABASE_URL pour votre application existante:

$ heroku config | grep DATABASE_URL  --app sushi DATABASE_URL => postgres://lswlmfdsfos:[email protected]/ldfoiusfsf

Ensuite, définissez la DATABASE_URL pour les nouvelles applications sur cette valeur:

$ heroku config:add DATABASE_URL=postgres://lswlmfdsfos:[email protected]/ldfoiusfsf --app sushi-analytics
Adding config vars: DATABASE_URL => postgres://lswlm...m/ldfoiusfsf Restarting app... done, v74. That's it

- maintenant, les deux applications partageront une seule base de données.

À titre de référence, le conseil original d'Heroku était de créer et d'utiliser une API pour accéder aux données à distance. Mon opinion personnelle est que dans l'ensemble, dans de nombreuses situations, c'est un bon conseil , (c'est-à-dire mieux que de simplement connecter plusieurs applications à la même base de données), bien que je puisse voir des situations où ce serait plus difficile que ça en vaut la peine.

MISE À JOUR

Selon les commentaires sur cette réponse, il convient de noter que Heroku se réserve le droit de modifier les URL de base de données selon les besoins. Si cela se produit, cela entraînera l'échec de vos connexions secondaires et vous devrez mettre à jour les URL en conséquence.

96
Paul Russell

Réponse de dernière minute à la question pertinente!

Heroku prend officiellement en charge une solution meilleure/gracieuse par le biais de son framework d'addon maintenant. Il est décrit dans leur dernière newsletter sur la façon de partager des addons entre les applications. Voici les extraits mentionnés dans le document:

$ 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

Lien: expand_the_power_of_add_ons

74
c360ian

autant que je sache, c'est possible - vous devrez regarder les variables de configuration heroku pour votre application avec la base de données, puis définir database_url sur l'application qui souhaite partager la base de données à la même valeur. Un peu hors piste cependant et quant à la façon dont il est pris en charge, je ne sais pas.

[~ # ~] modifier [~ # ~] Juste pour me rassurer, j'ai créé deux applications sur Heroku - un simple échafaudage ' poster 'avec un titre.

http://evening-spring-734.heroku.com/posts est le maître

http://electric-galaxy-230.heroku.com/posts - est l'esclave

Les articles créés sur l'un ou l'autre seront donc écrits dans l'URL de la base de données du soir-printemps-734.

Tout ce que j'ai fait, c'est utiliser la configuration Heroku pour obtenir la DATABASE_URL du soir-printemps-734, puis définir la même valeur dans la DATABASE_URL de electric-galaxy-230.

Vous pourriez vous retrouver avec des conditions de course DB fruitées, mais c'est certainement possible.

Magique hein?

15
John Beynon

Je l'ai reçu récemment dans la newsletter Heroku. Je leur envoie un e-mail pour savoir s'il s'agit vraiment d'une utilisation approuvée.

LE SAVIEZ-VOUS?

Partage d'une base de données avec de nombreuses applications

Saviez-vous que les applications Heroku peuvent partager une base de données commune? Par exemple, vous pouvez placer les fonctions d'analyse dans une application distincte de votre code utilisateur.

Réglez simplement le DATABASE_URLconfig var pour plusieurs applications à la même valeur. Obtenez d'abord le DATABASE_URL pour votre application existante:

$ heroku config | grep DATABASE_URL  --app sushi
DATABASE_URL   => postgres://lswlmfdsfos:[email protected]/ldfoiusfsf

Ensuite, définissez le DATABASE_URL pour les nouvelles applications de cette valeur:

$ heroku config:add DATABASE_URL=postgres://lswlmfdsfos:[email protected]/ldfoiusfsf --app sushi-analytics
Adding config vars: DATABASE_URL => postgres://lswlm...m/ldfoiusfsf
Restarting app... done, v74.

C'est tout - maintenant les deux applications partageront une base de données.

12
JoshRivers

Le plugin Amazon RDS fonctionne bien pour cela. Plusieurs applications peuvent partager la même instance RDS.

Vous avez la possibilité de les faire partager des tables ou d'éviter la collision des noms de table à l'aide du préfixe active_record.table_name_prefix.

7
Steve Wilhelm

Voir la référence Heroku: https://devcenter.heroku.com/categories/heroku-postgres

Q: Plusieurs applications Heroku peuvent-elles se connecter à une seule base de données?

Oui. Vous pouvez configurer plusieurs applications s'exécutant sur Heroku pour se connecter à une seule base de données, à condition que vous ayez les informations d'identification des bases de données. Remplacez simplement la DATABASE_URL des applications que vous souhaitez connecter à l'aide de la commande heroku config: add DATABASE_URL = ... command.

1
jmk