Forum: Rails-ES Conecciones con varias bases de datos en un mismo sistema

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Jhon K. (Guest)
on 2008-12-01 17:58
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
Roberto m. O. (Guest)
on 2008-12-01 18:17
(Received via mailing list)
Ya hace tiempo (puede que se haya quedado desfasado) escribi este post.

http://www.robertooliva.com/2007/01/26/multiples-b...

A lo mejor te ayuda

Un saludo
Roberto M. Oliva


Jhon K. escribio':
Jhon K. (Guest)
on 2008-12-02 16:18
Roberto m. Oliva wrote:
> Ya hace tiempo (puede que se haya quedado desfasado) escribi este post.
>
> http://www.robertooliva.com/2007/01/26/multiples-b...
>
> 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
Roberto m. O. (Guest)
on 2008-12-02 17:52
(Received via mailing list)
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':
Àlex Llaó Garcia (Guest)
on 2008-12-02 18:25
(Received via mailing list)
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!!!!
Jhon K. (Guest)
on 2008-12-02 18:42
À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
Jhon K. (Guest)
on 2008-12-02 18:53
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
Àlex Llaó Garcia (Guest)
on 2008-12-02 19:02
(Received via mailing list)
Jhon K. escribió:
>>>>>
>
Conexiones!!!!! Madre de diós!
Roberto m. O. (Guest)
on 2008-12-02 19:13
(Received via mailing list)
Àlex Llaó Garcia escribió:
>>>>
>>>>
> _______________________________________________
>
Nos van a cortar el hilo si seguimos por aquí, pero es: "Madre de Dios!"
Jhon K. (Guest)
on 2008-12-02 19:19
À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
Jhon K. (Guest)
on 2008-12-02 19:19
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
Àlex Llaó Garcia (Guest)
on 2008-12-02 19:19
(Received via mailing list)
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.
Roberto m. O. (Guest)
on 2008-12-02 19:22
(Received via mailing list)
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:
- Las bases de datos son iguales?
- Como sabes cuando tienes que guardar una cosa en una o una cosa en
otra?
- Si va por modelos (Multiples bases de datos por ActiveRecord) no
entiendes la siguiente url:
http://www.railsonwave.com/railsonwave/2006/12/11/...
que es la que explica como hacerlo.

> 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
Jhon K. (Guest)
on 2008-12-02 19:42
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:
> - Las bases de datos son iguales?
> - Como sabes cuando tienes que guardar una cosa en una o una cosa en
> otra?
> - Si va por modelos (Multiples bases de datos por ActiveRecord) no
> entiendes la siguiente url:
> http://www.railsonwave.com/railsonwave/2006/12/11/...
> que es la que explica como hacerlo.
>
>> 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
Manuel González Noriega (Guest)
on 2008-12-02 19:55
(Received via mailing list)
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 :)

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.
Jhon K. (Guest)
on 2008-12-02 19:58
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:
> - Las bases de datos son iguales?
> - Como sabes cuando tienes que guardar una cosa en una o una cosa en
> otra?
> - Si va por modelos (Multiples bases de datos por ActiveRecord) no
> entiendes la siguiente url:
> http://www.railsonwave.com/railsonwave/2006/12/11/...
> que es la que explica como hacerlo.
>
>> 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..
Roberto m. O. (Guest)
on 2008-12-02 20:21
(Received via mailing list)
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/...

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
Jhon K. (Guest)
on 2008-12-02 20:29
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/...
>
> 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
Jhon K. (Guest)
on 2008-12-03 20:40
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:
Jhon K. (Guest)
on 2008-12-03 20:44
1. En el archivo database.yml tengo a postgres de esta manera
development:

  adapter: postgresql
  database: ppp
  username: pp
  password: aasasasas
  host: localhost
  encoding: utf8
Jhon K. (Guest)
on 2008-12-03 20:45
2. 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
Jhon K. (Guest)
on 2008-12-03 20:46
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:

1. En el archivo database.yml tengo a postgres de esta manera
development:

  adapter: postgresql
  database: ppp
  username: pp
  password: aasasasas
  host: localhost
  encoding: utf8

2. 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
en ambos modelos tengo varias validaciones y me funcionan bien
validates_format_of,validates_uniqueness_of,validates_length_of, etc

   Otra cosa importante es que dentro del controlador de la tabla en
mysql puedo hacer consultas y actualizaciones a postgres y funcionan ya
que tengo ambas conexiones abiertas.
   Seguire probando otras opciones para luego probar en oracle.

Gracias por la ayuda y espero q esto sea de utilidad para el foro.

Cualquier sugerencia o solucion alternativa la recibire con gusto.
This topic is locked and can not be replied to.