español - Conexión a múltiples bases de datos en ruby on rails
consultas en ruby on rails (2)
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 la base de datos diferente, la aplicación funciona bien. Sin embargo quiero conectarme a dos bases de datos diferentes. ¿Es posible en rubí sobre raíles?
Para la conexión de varias bases de datos, debe agregar los siguientes códigos al archivo database.yml. Aquí, doy el ejemplo de conectar dos bases de datos desde una aplicación de rieles
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 utilizado dos bases de datos para el entorno de desarrollo y producción.
Ahora necesitamos conectar el modelo a las bases de datos. Cuando esté ejecutando su aplicación en modo de desarrollo y producción, todos los modelos se asignarán a través de los parámetros de desarrollo y producción de db que se mencionaron en su database.yml. Así que 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
Del mismo modo, cuando agregue la nueva migración para la segunda base de datos, deberá agregar el siguiente código.
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 usted :).
Utilice 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 desde database.yml así:
ActiveRecord::Base.establish_connection(ActiveRecord::Base.configurations[''other_env''])
También puedes configurarlo para un modelo específico:
MyClass.establish_connection(...)