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?
Respuestas:
ACTUALIZADO
Originalmente, esta respuesta indicaba que, aunque esto era posible con algunos trucos, se desaconsejaba enérgicamente . Esto se basó en los consejos del 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 diluido sus consejos en 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 funciones de análisis en una aplicación separada de su código de cara al usuario.
Simplemente configure la var de configuración DATABASE_URL para varias aplicaciones en el mismo valor. Primero, obtenga la 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
Luego, establezca DATABASE_URL para nuevas aplicaciones en 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 varias aplicaciones a la misma base de datos), aunque puedo ver situaciones en las que eso sería más problemático de lo que vale la pena.
ACTUALIZAR
Según los comentarios de 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, sus conexiones secundarias fallarán y deberá actualizar las URL en consecuencia.
¡Respuesta de última hora a la pregunta pertinente!
Heroku admite oficialmente una solución mejor / elegante a través de su marco complementario ahora. Se describe en su último boletín sobre cómo compartir complementos entre aplicaciones. A continuación se muestran los fragmentos mencionados en el artículo:
$ 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: expandiendo_el_poder_de_add_ons
heroku addons:attach originating_app_name::HEROKU_POSTGRESQL_COLOR_URL -a no_db_app_name
Por lo que sé, es posible: tendrá que mirar las variables de configuración de heroku para su aplicación con la base de datos y luego establecer database_url en la aplicación que quiere compartir la base de datos con el mismo valor. Sin embargo, un poco fuera de lugar y en cuanto a qué tan apoyado es, no lo sé.
EDITAR Solo para tranquilizarme, 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
Por lo tanto, las publicaciones creadas en cualquiera de ellos 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 afrutadas, pero definitivamente es posible hacerlo.
Magia, ¿eh?
Recibí esto en el boletín de Heroku recientemente. Les envío un correo electrónico para averiguar si realmente es un uso aprobado.
¿SABÍAS?
Compartiendo 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 funciones de análisis en una aplicación separada de su código de cara al usuario.
Simplemente configure la
DATABASE_URL
var de configuración para varias aplicaciones con el mismo valor. Primero, obtenga elDATABASE_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
Luego, establezca
DATABASE_URL
para nuevas aplicaciones en 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 complemento 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 de nombres de tablas utilizando active_record.table_name_prefix.
Consulte la referencia de Heroku: https://devcenter.heroku.com/categories/heroku-postgres
P: ¿Se pueden conectar varias aplicaciones Heroku a una sola base de datos?
Si. Puede configurar varias aplicaciones que se ejecutan en Heroku para conectarse a una sola base de datos, siempre que tenga las credenciales de la base de datos. Simplemente anule el DATABASE_URL de las aplicaciones que desea conectar usando el comando heroku config: add DATABASE_URL = ....