Conecciones con varias bases de datos en un mismo sistema


#1

Buenas amigos. Quisiera su opinion con este tema, como me sugieren
conectar un sistema con varias bases de datos esto para consultar o
actualizar en varias a la vz o si en algun momento quiero actuar sobre
una base de dato y en otra parte del sistema trabajar sobre otra.

Gracias


#2

Ya hace tiempo (puede que se haya quedado desfasado) escribi este post.

http://www.robertooliva.com/2007/01/26/multiples-bases-de-datos-en-rails/

A lo mejor te ayuda

Un saludo
Roberto M. Oliva

Jhon K. escribio’:


#3

Roberto m. Oliva wrote:

Ya hace tiempo (puede que se haya quedado desfasado) escribi este post.

http://www.robertooliva.com/2007/01/26/multiples-bases-de-datos-en-rails/

A lo mejor te ayuda

Un saludo
Roberto M. Oliva

Jhon K. escribio’:

Gracias por responder

No veo muy claro la solucion que tu le diste por que dices que seguiras
dando avances del tema y no los veo.

Revise los articulos que tiens en ese post y tampoco lo tengo claro lo
revisare con mas calma, cualquier otra sugerencia te lo agradeceria


#4

Hola

Si, tienes razon, el post es un tanto antiguo y solo es ana’lisis de la
situacio’n.
Lo que finalmente hago para tener multiples conexiones es poner un
before_filter en ApplicationControler con el siguiente codigo:

ActiveRecord::Base.establish_connection(
:adapter => “mysql”,
:host => ip_mysql,
:username => username,
:password => password,
:database => params[:database],
:encoding => ‘utf8’
)

En nuestro caso mapeamos la url con el siguiente route:

map.connect ‘:database/:controller/:action’

De esta manera, el primer elemento de la url es el que define la base de
datos a utilizar.

Como ves yo utilizo multiples base de datos por request y no por modelo
(no se cual es tu caso, ya que no lo explicas).

Tienes que tener cuidado con una cosa y es que, en el principio de los
tiempos de rails, ActiveRecord establece una conexion con la
configuracion establecida en config/database.yml . Esto hace que, con
nuestro sistema, esta primera conexion sea innecesaria. Nosotros lo que
hemos hecho es hacer un freeze del Rails y tocar el codigo para que no
la establezca.

Espero que todo esto te ayude

Un saludo
Roberto M. Oliva

Jhon K. escribio’:


#5

Roberto M. Oliva
escribió:> :username => username,

datos a utilizar.

Ya hace tiempo (puede que se haya quedado desfasado) escribi este post.


Ror-es mailing list
removed_email_address@domain.invalid
http://lists.simplelogica.net/mailman/listinfo/ror-es

Por el amor de dios!!! quitad eso de conecciones!!!


#6

Àlex Llaó Garcia wrote:

Roberto M. Oliva
escribi�:> :username => username,

datos a utilizar.

Ya hace tiempo (puede que se haya quedado desfasado) escribi este post.


Ror-es mailing list
removed_email_address@domain.invalid
http://lists.simplelogica.net/mailman/listinfo/ror-es

Por el amor de dios!!! quitad eso de conecciones!!

Por que? no entiendes a lo que me refiero? estoy hablando de instanciar


#7

Roberto m. Oliva wrote:

Hola

Si, tienes razon, el post es un tanto antiguo y solo es ana’lisis de la
situacio’n.
Lo que finalmente hago para tener multiples conexiones es poner un
before_filter en ApplicationControler con el siguiente codigo:

ActiveRecord::Base.establish_connection(
:adapter => “mysql”,
:host => ip_mysql,
:username => username,
:password => password,
:database => params[:database],
:encoding => ‘utf8’
)

En nuestro caso mapeamos la url con el siguiente route:

map.connect ‘:database/:controller/:action’

De esta manera, el primer elemento de la url es el que define la base de
datos a utilizar.

Como ves yo utilizo multiples base de datos por request y no por modelo
(no se cual es tu caso, ya que no lo explicas).

Tienes que tener cuidado con una cosa y es que, en el principio de los
tiempos de rails, ActiveRecord establece una conexion con la
configuracion establecida en config/database.yml . Esto hace que, con
nuestro sistema, esta primera conexion sea innecesaria. Nosotros lo que
hemos hecho es hacer un freeze del Rails y tocar el codigo para que no
la establezca.

Espero que todo esto te ayude

Un saludo
Roberto M. Oliva

Jhon K. escribio’:

Pero utilizaste algun plugin parea hacer eso?
cual seria el trabajo del before_filter en este caso?
yo lo que quiero es tener 2 o 3 bases de datos abiertas al mismo tiempo
para consultar o actualizar sea el caso, no entiendo lo que me quieres
decir con
"Como ves yo utilizo multiples base de datos por request y no por modelo

(no se cual es tu caso, ya que no lo explicas)."

Gracias


#8

Àlex Llaó Garcia escribió:


Nos van a cortar el hilo si seguimos por aquí, pero es: “Madre de Dios!”


#9

Àlex Llaó Garcia wrote:

Jhon K. escribió:

Conexiones!!! Madre de diós!

Coño pero si sabes a lo que me refiero esta demas tu comentario…
en verdad necesito solucionar mi problema de esos detalles que tu hablas
me ocupare luego, igual gracias


#10

Jhon K. escribió:

Conexiones!!! Madre de diós!


#11

Roberto m. Oliva wrote:

Hola

Si, tienes razon, el post es un tanto antiguo y solo es ana’lisis de la
situacio’n.
Lo que finalmente hago para tener multiples conexiones es poner un
before_filter en ApplicationControler con el siguiente codigo:

ActiveRecord::Base.establish_connection(
:adapter => “mysql”,
:host => ip_mysql,
:username => username,
:password => password,
:database => params[:database],
:encoding => ‘utf8’
)

En nuestro caso mapeamos la url con el siguiente route:

map.connect ‘:database/:controller/:action’

De esta manera, el primer elemento de la url es el que define la base de
datos a utilizar.

Como ves yo utilizo multiples base de datos por request y no por modelo
(no se cual es tu caso, ya que no lo explicas).

Tienes que tener cuidado con una cosa y es que, en el principio de los
tiempos de rails, ActiveRecord establece una conexion con la
configuracion establecida en config/database.yml . Esto hace que, con
nuestro sistema, esta primera conexion sea innecesaria. Nosotros lo que
hemos hecho es hacer un freeze del Rails y tocar el codigo para que no
la establezca.

Espero que todo esto te ayude

Un saludo
Roberto M. Oliva

Jhon K. escribio’:
Pero utilizaste algun plugin parea hacer eso?
cual seria el trabajo del before_filter en este caso?
yo lo que quiero es tener 2 o 3 bases de datos abiertas al mismo tiempo
para consultar o actualizar sea el caso, no entiendo lo que me quieres
decir con
“Como ves yo utilizo multiples base de datos por request y no por modelo
(no se cual es tu caso, ya que no lo explicas).”

Gracias


#12

Roberto M. Oliva escribió:

escribi�:> :username => username,

Por el amor de dios!!! quitad eso de conecciones!!

Nos van a cortar el hilo si seguimos por aquí, pero es: “Madre de Dios!”


Ror-es mailing list
removed_email_address@domain.invalid
http://lists.simplelogica.net/mailman/listinfo/ror-es

Menos mal que alguien lo ha visto!!!

JEJEEJJE.


#13

Hola

Jhon K. escribio’:

Pero utilizaste algun plugin parea hacer eso?

No, no utilice ningu’n plugin para esto. Solamente cambie lo que te
estoy contando.

cual seria el trabajo del before_filter en este caso?

El trabajo del before_filter es iniciar la conexion a la base de datos
correspondiente, nada ma’s iniciar la peticio’n.

yo lo que quiero es tener 2 o 3 bases de datos abiertas al mismo tiempo
para consultar o actualizar sea el caso,

Explica un poco ma’s esto:

no entiendo lo que me quieres
decir con "Como ves yo utilizo multiples base de datos por request y no por modelo

Pues que, como pudiste leer en mi post, hay dos maneras de separar la
base de datos, por ActiveRecord o por ActionController y mi
implementacio’n se basa en la segunda.

(no se cual es tu caso, ya que no lo explicas)."

Gracias

Por cierto… Magic Multiconnections tiene buena pinta y parece bastante
flexible pero, a primera vista me preocupan las implicaciones
colaterales que puedan surgir y que apriori no ves: Tests, Migrations,
etc.

Un saludo
Roberto


#14

Roberto m. Oliva wrote:

Hola

Jhon K. escribio’:

Pero utilizaste algun plugin parea hacer eso?

No, no utilice ningu’n plugin para esto. Solamente cambie lo que te
estoy contando.

cual seria el trabajo del before_filter en este caso?

El trabajo del before_filter es iniciar la conexion a la base de datos
correspondiente, nada ma’s iniciar la peticio’n.

yo lo que quiero es tener 2 o 3 bases de datos abiertas al mismo tiempo
para consultar o actualizar sea el caso,

Explica un poco ma’s esto:

no entiendo lo que me quieres
decir con "Como ves yo utilizo multiples base de datos por request y no por modelo

Pues que, como pudiste leer en mi post, hay dos maneras de separar la
base de datos, por ActiveRecord o por ActionController y mi
implementacio’n se basa en la segunda.

(no se cual es tu caso, ya que no lo explicas)."

Gracias

Por cierto… Magic Multiconnections tiene buena pinta y parece bastante
flexible pero, a primera vista me preocupan las implicaciones
colaterales que puedan surgir y que apriori no ves: Tests, Migrations,
etc.

Un saludo
Roberto

En tu caso las bases de datos son iguales osea trabajas con los mismos
modelos?
voy a preguntar para saber si las base de datos son iguales o no,

sobre Magic Multiconnections voy a investigar mas antes de probarlo, la
verdad tu solucion me parece buena lo que me gustaria saber es si el
“params[:database]” lo madas de las vistas, como tu determinabas este
parametro.

Gracias


#15

Roberto m. Oliva wrote:

Hola

Jhon K. escribio’:

Pero utilizaste algun plugin parea hacer eso?

No, no utilice ningu’n plugin para esto. Solamente cambie lo que te
estoy contando.

cual seria el trabajo del before_filter en este caso?

El trabajo del before_filter es iniciar la conexion a la base de datos
correspondiente, nada ma’s iniciar la peticio’n.

yo lo que quiero es tener 2 o 3 bases de datos abiertas al mismo tiempo
para consultar o actualizar sea el caso,

Explica un poco ma’s esto:

no entiendo lo que me quieres
decir con "Como ves yo utilizo multiples base de datos por request y no por modelo

Pues que, como pudiste leer en mi post, hay dos maneras de separar la
base de datos, por ActiveRecord o por ActionController y mi
implementacio’n se basa en la segunda.

(no se cual es tu caso, ya que no lo explicas)."

Gracias

Por cierto… Magic Multiconnections tiene buena pinta y parece bastante
flexible pero, a primera vista me preocupan las implicaciones
colaterales que puedan surgir y que apriori no ves: Tests, Migrations,
etc.

Un saludo
Roberto

Hola.

Con respecto a las bases de datos una va a estar en postgres y la otra
en oracle y por lo que me dicen tampoco van a tener la misma estructura
osea no van a tener tablas en comun hasta ahora eso es lo que me dicen.

SI es asi y por lo que me has explicado mi implemetacion deberia ser por
ActiveRecord o me equivoco? si me puedes dar alguna sugerencia te lo
agradeceria

Gracias…


#16

Jhon K. escribio’:

yo lo que quiero es tener 2 o 3 bases de datos abiertas al mismo tiempo
que es la que explica como hacerlo.

SI es asi y por lo que me has explicado mi implemetacion deberia ser por
ActiveRecord o me equivoco? si me puedes dar alguna sugerencia te lo
agradeceria

Gracias…

Pues si, en tu caso, me parece la mejor opcion la de establecer la
conexion por modelo.
Leete tranquilamente el enlace que te digo:

http://www.railsonwave.com/railsonwave/2006/12/11/multiple-database-handlng-with-rails

Que basicamente establece la conexion por modelo. De esta manera puedes
tener unas tablas en una base de datos y otras tablas en otra. De todas
formas no se como se comporta ni si te puedes encontrar con problemas
ocultos.

Un saludo
Roberto


#17

2008/12/2 Roberto M. Oliva removed_email_address@domain.invalid

Nos van a cortar el hilo si seguimos por aquí, pero es: “Madre de Dios!”

Sí, no hagáis descarrilar el hilo :slight_smile:

Sobre lo del nivel del castellano en la lista, a mi también me preocupa,
pero escribiré en otro momento un mail recordatorio de caracter general.


#18

Hola.

Buenas… avanzando con mi problema e llegado a una solucion que
hasta los momentos a funcionado pero que necesita seguir siendo sometida
a prueba y a ser mejorada.

Como te habia comentado tengo una base de datos en postgres y otra por
lo momentos de prueba en mysql creo q al final esta sera en oracle,
bueno las bases de datos tienen diferente estructura y para tener
conexion con ambas hic:


#19

Roberto m. Oliva wrote:

Jhon K. escribio’:

yo lo que quiero es tener 2 o 3 bases de datos abiertas al mismo tiempo
que es la que explica como hacerlo.

SI es asi y por lo que me has explicado mi implemetacion deberia ser por
ActiveRecord o me equivoco? si me puedes dar alguna sugerencia te lo
agradeceria

Gracias…

Pues si, en tu caso, me parece la mejor opcion la de establecer la
conexion por modelo.
Leete tranquilamente el enlace que te digo:

http://www.railsonwave.com/railsonwave/2006/12/11/multiple-database-handlng-with-rails

Que basicamente establece la conexion por modelo. De esta manera puedes
tener unas tablas en una base de datos y otras tablas en otra. De todas
formas no se como se comporta ni si te puedes encontrar con problemas
ocultos.

Un saludo
Roberto

Ok, revisare esto con calma y lo probare.

Gracias por tu ayuda


#20
  1. En la carpeta models estan todos los modelos de esta base de datos y
    los modelos de las tablas de la base de datos en mysql, la
    diferencia esta en que
    2.1 Los modelos de postgres estan de esta manera
    class TABLA < ActiveRecord::Base
    end
    2.2 los modelos de tablas que quiero consultar en mysql
    class TABLA < ActiveRecord::Base
    establish_connection(
    :adapter => “mysql”,
    :host => “localhost”,
    :username => “root”,
    :password => “sss4545hahghjagsyuiy54564”,
    :database => “prueba”
    )
    end