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?
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.
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
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?
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_URL
config var pour plusieurs applications à la même valeur. Obtenez d'abord leDATABASE_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.
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.
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.