J'ai une Ruby on Rails application fonctionne bien et connectée à une base de données. Maintenant, je veux me connecter à une base de données différente à partir de la même application. Le modèle de données peut être exactement le même. En fait, si je me connecte à une base de données différente, l'application fonctionne correctement. Cependant, je veux me connecter à deux bases de données différentes. Est-il possible en Ruby on rails?
Pour une connexion à plusieurs bases de données, vous devez ajouter les codes suivants au fichier database.yml. Ici, je donne l'exemple de la connexion de deux bases de données à partir d'une application 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
Ici, j'ai utilisé deux bases de données pour l'environnement de développement et de production.
Nous devons maintenant connecter le modèle aux bases de données. Lorsque vous exécutez votre application en mode développement et production, tous les modèles seront mappés via les paramètres de développement et de production db ceux mentionnés dans votre database.yml. Donc, pour certains modèles, nous devons nous connecter à une autre base de données.
Supposons que nous avons deux modèles Utilisateur et Catégorie. La table des utilisateurs se trouve dans db1_dev et db1_prod, la table des catégories dans db2_dev et db2_prod.
Modèle de catégorie
class Category < ActiveRecord::Base
establish_connection "#{Rails.env}_sec"
end
De même, lorsque vous ajoutez la nouvelle migration pour la deuxième base de données, vous devez lui ajouter le code suivant.
class CreateRewards < ActiveRecord::Migration
def connection
ActiveRecord::Base.establish_connection("#{Rails.env}_sec").connection
end
def change
# your code goes here.
end
end
J'espère que cela fonctionnera pour vous :).
Utilisation establish_connection
pour passer à une autre base de données:
ActiveRecord::Base.establish_connection(
:adapter => "mysql",
:Host => "localhost",
:username => "myuser",
:password => "mypass",
:database => "somedatabase"
)
Vous pouvez également passer un environnement préconfiguré à partir de database.yml comme ceci:
ActiveRecord::Base.establish_connection(ActiveRecord::Base.configurations['other_env'])
Vous pouvez également le définir pour un modèle spécifique:
MyClass.establish_connection(...)