Connessione a più database in ruby ​​on rails

Ho un’applicazione ruby ​​on rails funzionante e connessa a un database. Ora voglio collegarmi a un altro database dalla stessa applicazione. Il modello dati può essere esattamente lo stesso. Infatti se mi collego al diverso database l’applicazione funziona correttamente. Tuttavia voglio collegarmi a due diversi database. È ansible in ruby su rotaie?

Per una connessione a più database, è necessario aggiungere i seguenti codici al file database.yml. Qui, sto dando l’esempio di colbind due database da un’applicazione di rotaie

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 

Qui ho usato due database per l’ambiente di sviluppo e produzione.

Ora dobbiamo connettere il modello ai database. Quando si esegue l’applicazione in modalità di sviluppo e produzione, tutti i modelli verranno mappati tramite i parametri di sviluppo e di produzione indicati nel database.yml. Quindi per alcuni modelli dobbiamo connetterci ad altri database.

Supponiamo che, abbiamo due modelli utente e categoria. La tabella utenti è in db1_dev e db1_prod, la tabella delle categorie in db2_dev e db2_prod.

Modello di categoria

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

Allo stesso modo, quando si aggiunge la nuova migrazione per il secondo database, è necessario aggiungere il seguente codice ad esso.

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

Spero che funzionerà per voi :).

Utilizzare establish_connection per passare a un altro database:

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

Puoi anche passare un ambiente preconfigurato da database.yml in questo modo:

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

Puoi anche impostarlo per un modello specifico:

 MyClass.establish_connection(...)