Comparte la base de datos entre 2 aplicaciones en Heroku

Quiero acceder a la base de datos de una aplicación desde otra aplicación Heroku. ¿Es eso posible en la base de datos compartida?

ACTUALIZADO

Originalmente, esta respuesta decía que aunque esto era posible con algunos trucos, se desaconsejaba fuertemente . Esto se basó en consejos sobre el sitio web de soporte para desarrolladores de Heroku. Sin embargo, recientemente Heroku emitió una comunicación que describe específicamente cómo lograr esto, y ha suavizado sus consejos sobre el sitio del desarrollador. El texto completo de esta sección de su correo electrónico se incluye a continuación:

¿Sabías que las aplicaciones de Heroku pueden compartir una base de datos común? Por ejemplo, puede colocar las funciones de análisis en una aplicación separada de su código de usuario.

Simplemente configure la variable de configuración DATABASE_URL para varias aplicaciones con el mismo valor. Primero, obtenga DATABASE_URL para su aplicación existente:

$ heroku config | grep DATABASE_URL --app sushi DATABASE_URL => postgres://lswlmfdsfos:5FSLVUSLLT123@ec2-123-456-78-90.compute1.amazonaws.com/ldfoiusfsf 

A continuación, configure DATABASE_URL para las nuevas aplicaciones con este valor:

 $ 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 

– Ahora ambas aplicaciones compartirán una base de datos.

Solo como punto de referencia, el consejo original de Heroku fue crear y usar una API para acceder a los datos de forma remota. Mi opinión personal es que en general, para muchas situaciones, este es un buen consejo (es decir, mejor que simplemente conectar múltiples aplicaciones al mismo DB) aunque puedo ver situaciones en las que eso sería más problemático de lo que vale.

ACTUALIZAR

Según los comentarios sobre esta respuesta, vale la pena señalar que Heroku se reserva el derecho de cambiar las URL de la base de datos según sea necesario. Si esto ocurre, las conexiones secundarias fallarán y deberá actualizar las URL según corresponda.

¡Última respuesta a la pregunta pertinente!

Heroku oficialmente apoya una solución mejor / elegante por el camino de su marco de complemento ahora. Se describe en su último boletín sobre cómo compartir complementos entre aplicaciones. A continuación se muestran los fragmentos mencionados en la reseña:

 $ 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 

Enlace: expanding_the_power_of_add_ons

por lo que yo sé que es posible, tendrás que mirar las variables de configuración de heroku para tu aplicación con la base de datos y luego establecer la base de datos en la aplicación que quiere compartir la base de datos con el mismo valor. Un poco fuera de pista, sin embargo, y en cuanto a qué tan compatible es, no lo sé.

EDITAR Para tranquilizar mi mente, he creado dos aplicaciones en Heroku: una simple “publicación” de andamio con un título.

http://evening-spring-734.heroku.com/posts es el maestro

http://electric-galaxy-230.heroku.com/posts – es el esclavo

De modo que las publicaciones creadas en cualquiera de ellas se escribirán en la URL de la base de datos de evening-spring-734.

Todo lo que he hecho es usar heroku config para obtener DATABASE_URL de evening-spring-734 y luego establecer el mismo valor en DATABASE_URL de electric-galaxy-230.

Podrías terminar con algunas condiciones de carrera de DB con sabor a fruta, pero definitivamente es posible hacerlo.

Magia ¿eh?

Recibí esto en el boletín de Heroku recientemente. Los envío por correo electrónico para averiguar si realmente es un uso aprobado.

¿SABÍAS?

Compartir una base de datos con muchas aplicaciones

¿Sabías que las aplicaciones de Heroku pueden compartir una base de datos común? Por ejemplo, puede colocar las funciones de análisis en una aplicación separada de su código de usuario.

Simplemente configure la DATABASE_URL configuración DATABASE_URL para varias aplicaciones con el mismo valor. Primero, obtenga DATABASE_URL para su aplicación existente:

 $ heroku config | grep DATABASE_URL --app sushi DATABASE_URL => postgres://lswlmfdsfos:5FSLVUSLLT123@ec2-123-456-78-90.compute-1.amazonaws.com/ldfoiusfsf 

A continuación, configure DATABASE_URL para las nuevas aplicaciones con este valor:

 $ 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. 

Eso es todo, ahora ambas aplicaciones compartirán una base de datos.

El plugin de Amazon RDS funciona bien para esto. Varias aplicaciones pueden compartir la misma instancia de RDS.

Tiene la flexibilidad de hacer que compartan tablas o evitar la colisión del nombre de la tabla utilizando active_record.table_name_prefix.

Consulte la referencia de Heroku: https://devcenter.heroku.com/categories/heroku-postgres

P: ¿Pueden conectarse múltiples aplicaciones de Heroku a una única base de datos?

Sí. Puede configurar múltiples aplicaciones que se ejecutan en Heroku para conectarse a una única base de datos, siempre que tenga las credenciales de las bases de datos. Simplemente anule el DATABASE_URL de las aplicaciones que desea conectar usando la configuración de heroku: add DATABASE_URL = … comando.