Conexión a múltiples bases de datos en ruby ​​on rails

Tengo una aplicación Ruby on Rails que funciona bien y está conectada a una base de datos. Ahora quiero conectarme a una base de datos diferente de la misma aplicación. El modelo de datos puede ser exactamente el mismo. De hecho, si me conecto a una base de datos diferente, la aplicación funciona bien. Sin embargo, quiero conectarme a dos bases de datos diferentes. ¿Es posible en Ruby on Rails?

Para la conexión de bases de datos múltiples, debe agregar los siguientes códigos al archivo database.yml. Aquí, doy el ejemplo de conectar dos bases de datos de una aplicación de Rails

config / database.yml

development: adapter: mysql2 database: db1_dev username: root password: xyz host: localhost development_sec: adapter: mysql2 database: db2_dev username: root password: xyz host: localhost production: adapter: mysql2 database: db1_prod username: root password: xyz host: your-production-ip production_sec: adapter: mysql2 database: db2_prod username: root password: xyz host: your-production-ip 

Aquí he usado dos bases de datos para el entorno de desarrollo y producción.

Ahora necesitamos conectar el modelo a las bases de datos. Cuando ejecute la aplicación en modo de desarrollo y producción, todos los modelos se correlacionarán a través de los parámetros db de desarrollo y producción mencionados en su database.yml. Entonces, para algún modelo, necesitamos conectarnos a otra base de datos.

Supongamos que tenemos dos modelos de usuario y categoría. La tabla de usuarios está en db1_dev y db1_prod, la tabla de categorías en db2_dev y db2_prod.

Modelo de categoría

 class Category < ActiveRecord::Base establish_connection "#{Rails.env}_sec" end 

De forma similar, cuando agrega la nueva migración para la segunda base de datos, necesita agregarle el código siguiente.

 class CreateRewards < ActiveRecord::Migration def connection ActiveRecord::Base.establish_connection("#{Rails.env}_sec").connection end def change # your code goes here. end end 

Espero que funcione para ti :).

Use establish_connection para cambiar a una base de datos diferente:

 ActiveRecord::Base.establish_connection( :adapter => "mysql", :host => "localhost", :username => "myuser", :password => "mypass", :database => "somedatabase" ) 

También puede pasar un entorno preconfigurado de database.yml como sigue:

 ActiveRecord::Base.establish_connection(ActiveRecord::Base.configurations['other_env']) 

También puede configurarlo para un modelo específico:

 MyClass.establish_connection(...)