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?
fuente
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 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:[email protected]/ldfoiusfsf
Luego, establezca DATABASE_URL para nuevas aplicaciones en este valor:
$ 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
- 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
fuente
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?
fuente
Recibí esto en el boletín de Heroku recientemente. Les envío un correo electrónico para averiguar si realmente es un uso aprobado.
fuente
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.
fuente
Consulte la referencia de Heroku: https://devcenter.heroku.com/categories/heroku-postgres
fuente