2011-05-12 32 views

Respuesta

95

ACTUALIZADO

Originalmente, esta respuesta afirma que, aunque esto era posible con un poco de ingenio, era fuertemente desanimado. 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:

¿Usted sabía que las aplicaciones pueden heroku compartir una base de datos común? Por ejemplo, puede poner las funciones de análisis en una aplicación separada de su código de usuario.

Simplemente configure la configuración var DATABASE_URL para varias aplicaciones con el mismo valor . En primer lugar, obtener la DATABASE_URL para su aplicación existente:

$ heroku config | grep DATABASE_URL --app sushi DATABASE_URL => postgres://lswlmfdsfos:[email protected]/ldfoiusfsf 

A continuación, establezca la DATABASE_URL para las nuevas aplicaciones de 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 comparten una base de datos.

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

ACTUALIZACIÓN

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

+1

sólo aplicaciones de configuración en Heroku para demostrar que es posible - detalles en mi respuesta. –

+0

@ John Coo - interesante :) No estoy seguro en sentido estricto que merezca un voto negativo. Heroku específicamente lo prohíbe en sus documentos de desarrollador, lo que significa que podría romperse inesperadamente en algún momento en el futuro ... –

+1

Lo suficientemente justo, el voto negativo se retractó ... ¡El apoyo de Heroku da una respuesta diferente! Pregunta: Si desarrollo dos aplicaciones heroku, ¿pueden acceder a una única base de datos ? La razón por la que pregunto es que tenemos una aplicación de rieles y una aplicación de sinatra , y necesitan compartir una base de datos de postgres. ¡Preferiría no hacer que por http! Respuesta del soporte de heroku: Sí, si es necesario, puede hacerlo. Cada aplicación Heroku obtiene una base de datos aprovisionada de forma predeterminada, pero es posible que una aplicación use la base de datos de otra aplicación simplemente copiando la configuración var DATABASE_URL de una aplicación a otra. –

15

hasta donde 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 configurar 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é.

EDIT Solo para tranquilizar 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

Así puestos creados en ambos se escribirá en la base de datos de URL de la tarde de la primavera-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ía terminar con algunas condiciones frutales de carrera de DB, pero definitivamente es posible hacerlo.

Magic huh?

+0

+1: Veo esto como muy útil para hacer URL cortas o de vanidad ... como http://myapp.me/iwasrobbed (Aplicación Heroku # 1) redirige a http://myapp.com/users/1 (Heroku) Aplicación n. ° 2) ya que ahora puedo almacenar el nombre de la vanidad en el DB de usuario estándar. Gracias John! – iwasrobbed

+1

heroku pg: promueve DATABASE_URL --app your_app_name es la forma admitida de establecer esta variable. –

+0

mi único comentario es sobre las condiciones de la carrera. Los trabajadores y la instancia web serían los mismos, al igual que los trabajadores remotos como el trabajador de hierro o resqueue. – baash05

7

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.

12

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

¿LO sabía?

compartir una base de datos con muchas aplicaciones

¿Sabías que las aplicaciones 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 DATABASE_URLconfig var para varias aplicaciones con el mismo valor. En primer lugar, obtener la DATABASE_URL para su aplicación existente:

$ heroku config | grep DATABASE_URL --app sushi 
DATABASE_URL => postgres://lswlmfdsfos:[email protected]/ldfoiusfsf 

A continuación, establezca la DATABASE_URL para las nuevas aplicaciones de 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. 

Eso es todo - ahora ambas aplicaciones comparten una base de datos.

referencia
+4

Le pregunté a Heroku sobre el uso de este método para obtener un dinamómetro Web gratuito y un dinamómetro Worker libre. Aquí está su respuesta. >> "Josh - desaconsejamos hacer esto, pero además habría problemas con el trabajador en inactividad. Una vez que estuviera inactivo, sería dejar de hacer cualquier trabajo y sin nada para 'despertarlo' como una web solicitud, sería inútil como trabajador. "<< Parece que puede usar varias aplicaciones en la misma base de datos, pero no es muy útil de forma gratuita. – JoshRivers

+0

Lo estoy usando para fines de desarrollo, ya tengo miles de filas en mi aplicación en vivo, y la nueva apariencia se está desarrollando en otra aplicación heroku más pequeña, por lo que poder compartir datos es genial, puedo desarrollar y ver nuevos looks con los mismos datos –

2

Ver Heroku: https://devcenter.heroku.com/categories/heroku-postgres

Q: ¿Puede múltiples aplicaciones heroku conectarse a una sola base de datos?

Sí. Puede configurar varias aplicaciones que se ejecutan en Heroku para conectar 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 el comando heroku config: add DATABASE_URL = ....

72

Última respuesta a la pregunta pertinente!

Heroku oficialmente es compatible con 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 presentan los fragmentos mencionados en la valoración crítica:

$ 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

+0

¡Muchísimas gracias !, ¡esta debería ser la respuesta priorizada! – HLL

+2

Esta es la respuesta correcta. Todas las otras respuestas están en desuso, y la mayoría de ellas están duplicadas de todos modos. – jelder

+2

El formato del comando que utilicé fue 'heroku addons: adjuntar originating_app_name :: HEROKU_POSTGRESQL_COLOR_URL -a no_db_app_name' – Marklar

Cuestiones relacionadas