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?
la source
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?
ACTUALISÉ
À 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é ses 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 destiné à l'utilisateur.
Définissez simplement la variable de configuration DATABASE_URL pour plusieurs applications sur la même valeur. Commencez par obtenir la DATABASE_URL de votre application existante:
$ heroku config | grep DATABASE_URL --app sushi DATABASE_URL => postgres://lswlmfdsfos:[email protected]/ldfoiusfsf
Ensuite, définissez 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 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, pour 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ù cela poserait plus de problèmes que cela ne vaut la peine.
METTRE À JOUR
Selon les commentaires sur cette réponse, il convient de noter que Heroku se réserve le droit de modifier les URL de la base de données si nécessaire. Si cela se produit, vos connexions secondaires échoueront 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 leur framework d'addon maintenant. Il est décrit dans leur dernière newsletter sur la façon de partager des addons entre applications. Voici les extraits mentionnés dans l'écriture:
Lien: expand_the_power_of_add_ons
la source
heroku addons:attach originating_app_name::HEROKU_POSTGRESQL_COLOR_URL -a no_db_app_name
pour autant que je sache que c'est possible - vous devrez regarder les variables de configuration heroku pour votre application avec la base de données, puis définir le database_url sur l'application qui souhaite partager la base de données sur la même valeur. Un peu hors piste cependant et quant à son soutien, je ne sais pas.
EDIT Juste pour me rassurer, j'ai créé deux applications sur Heroku - un simple «post» d'échafaudage avec un titre.
http://evening-spring-734.heroku.com/posts est le maître
http://electric-galaxy-230.heroku.com/posts - est l'esclave
Ainsi, les messages créés sur l'un ou l'autre seront écrits dans l'URL de la base de données de soir-printemps-734.
Tout ce que j'ai fait est d'utiliser heroku config pour obtenir la DATABASE_URL du soir-printemps-734, puis de 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 de le faire.
De la magie, hein?
la source
J'ai récemment reçu ceci dans la newsletter Heroku. Je leur envoie un e-mail pour savoir s'il s'agit vraiment d'une utilisation approuvée.
la source
Le plugin Amazon RDS fonctionne bien pour cela. Plusieurs applications peuvent partager la même instance RDS.
Vous avez la possibilité de leur faire partager des tables ou d'éviter la collision de noms de tables en utilisant le préfixe active_record.table_name_prefix.
la source
Voir la référence Heroku: https://devcenter.heroku.com/categories/heroku-postgres
la source