Il existe des raisons distinctes pour lesquelles vous devriez envisager d'avoir plusieurs bases de données dans votre application Ruby on Rails. Dans ma situation, je m'attendais à stocker de grandes quantités de données. Considérez que la base de données par défaut est MySQL. Dans notre application, le fichier database.yml écrit les connexions pour MySQL de manière normale. Après cela, pour connecter postgresql dans la même application, nous devons créer des fichiers personnalisés.
Créez les fichiers de base de données personnalisés pour connecter postgresql
Nous allons créer une deuxième base de données appelée "Statistiques"
Tout d'abord, créez le fichier config/database_stats.yml et remplissez-le comme vous le faites avec le fichier de configuration de la base de données principale. Votre fichier ressemblera à ceci :
développement:
adaptateur : postgresql
encodage : utf8
reconnecter : faux
base de données : db_info_development
piscine : 5
hôte : hôte local
nom d'utilisateur : postgres
mot de passe:
Nous allons maintenant créer un répertoire qui contiendra le schéma et toutes les migrations de la base de données Stats. Créer un répertoire avec le nom db_stats dans la racine des rails et copiez la structure comme mentionné ci-dessous
–db
-émigrer
schéma.rb
graines.rb
–db_stats
-émigrer
schéma.rb
graines.rb
Les fichiers créés doivent être vides.
Ajouter des tâches de râteau
Pour gérer la base de données de statistiques, nous devons écrire des tâches personnalisées pour la création, les migrations et d'autres fonctionnalités. Créer un fichier lib/tasks/db_stats.rake avec le contenu ci-dessous
espace de noms : les statistiques le font
espace de noms :db do |ns|
tâche : drop do
Rake::Task["db:drop"].invoke
fin
tâche : créer, faire
Rake::Task["db:create"].invoke
fin
tâche : configuration à faire
Rake::Task["db:setup"].invoke
fin
tâche : migrer faire
Rake::Task["db:migrate"].invoke
fin
tâche : rollback faire
Rake::Task["db:rollback"].invoke
fin
tâche : graine faire
Rake::Task["db:seed"].invoke
fin
tâche : version à faire
Rake::Task["db:version"].invoke
fin
espace de noms : schéma à faire
tâche : charger faire
Rake::Task["db:schema:load"].invoke
fin
tâche : dump faire
Rake::Task["db:schema:dump"].invoke
fin
fin
espace de noms : tester faire
tâche : préparer, faire
Rake::Task["db:test:prepare"].invoke
fin
fin
# ajoute et ajoute les tâches appropriées à toutes les tâches définies ci-dessus
ns.tasks.each faire |tâche|
task.enhance ["stats:set_custom_config"] faire
Rake::Task["stats:revert_to_original_config"].invoke
fin
fin
fin
tâche : set_custom_config faire
# enregistre les variables actuelles
@original_config = {
env_schema : ENV['SCHEMA'],
configuration : Rails.application.config.dup
}
# définit les variables de configuration pour la base de données personnalisée
ENV['SCHEMA'] = « db_stats/schema.rb »
Rails.application.config.paths['db'] = [« db_stats »]
Rails.application.config.paths['db/migrate'] = [“db_stats/migrate”]
Rails.application.config.paths['db/seeds'] = [“db_stats/seeds.rb”]
Rails.application.config.paths['config/database'] = [“config/database_stats.yml”]
fin
tâche :revert_to_original_config faire
# réinitialise les variables de configuration aux valeurs d'origine
ENV['SCHEMA'] = @original_config[:env_schema]
Rails.application.config = @original_config[:config]
fin
fin
Une fois toute cette configuration effectuée, nous pouvons créer la base de données de statistiques et effectuer sa première migration :
Statistiques de rake $ : db : créer Statistiques de rake $ : db : migrerCela générera le fichier de schéma de la base de données Stats dans db_stats/schema.rb. Ajouter un générateur de migration personnalisé Nous ne pouvons pas utiliser le générateur de rails car le chemin code en dur le base de données/migrer. Par conséquent, nous devons disposer d'un générateur personnalisé pour créer toutes les migrations pour la base de données de statistiques. Créez le générateur dans lib/generators/stats_migration_generator.rb et collez le code suivant : require 'rails/generators/active_record/migration/migration_generator' classe StatsMigrationGenerator < ActiveRecord::Generators::MigrationGenerator source_root File.join(File.dirname(ActiveRecord::Generators::MigrationGenerator. instance_method(:create_migration_file) .source_location.first), « modèles ») def create_migration_file set_local_assigns ! validate_file_name ! migration_template @migration_template, « db_stats/migrate/#{file_name}.rb » fin fin Avec tout cela en place, nous pouvons désormais générer des migrations pour la base de données Stats :
$ rails g stats_migration nom_migrationCe fichier de migration est créé dans le répertoire de migration de la base de données de statistiques. db_stats/migrate. Après cela, exécutez la commande suivante pour migrer.
Statistiques de rake $ : db : migrerFinaliser la connexion et les modèles pour PostgreSQL Nous avons presque terminé. Ajouter un nouveau fichier d'initialisation config/initialiseurs/db_stats.rb et collez ce qui suit :
# enregistre les paramètres de la base de données de statistiques dans la variable globale DB_STATS = YAML::load(ERB.new(File.read(Rails.root.join("config",database_stats.yml"))).result)[Rails.env]Configuration de MongoDB : Mongoid gem est un framework ODM (Object-Document-Mapper) pour MongoDB dans Ruby.
gemme 'mongoïde', '~> 5.1.0'Vous pouvez générer un fichier de configuration en exécutant le générateur. Mongoid s'occupera ensuite de tout le reste à partir de là.
$ rails g mongoide:configEnsuite, cela crée mongoide.yml comme ci-dessous développement: clients : défaut: base de données : mongoide hôtes: -hôte local : 27017 Maintenant, dans notre application, nous avons intégré avec succès le MySQL, postgresql et mongodb Considérez trois modèles : utilisateur, produit, image. L'utilisation de ces trois modèles nous aidera à connecter différentes bases de données dans notre application. Modèle utilisateur avec connexion MySQL Utilisateur de classe < ActiveRecord :: Base fin $ lance la migration vers create_users field_names rake db: migrer Ce fichier de migration est créé sous db/migrate et sera stocké dans la base de données MySQL. classe Produit < ActiveRecord :: Base établir_connexion DB_STATS fin $ rails g stats_migration create_products créer db_stats/migrate/20151201191642_create_products.rb Ce fichier de migration est créé dans le répertoire migrate de la base de données de statistiques db_stats/migrate. Image de classe inclure Mongoid :: Document champ : nom, tapez : chaîne champ : description, tapez : chaîne fin Pas besoin d'exécuter des migrations pour mongodb puisque c'est le cas ODM. Ces données sont créées sous MongoDB. Ne hésitez pas à Contactez-nous si vous avez des questions.
Katneni Naga Sai Tejaswi
Développeur de logiciels senior
Abonnez-vous pour les dernières mises à jour
Articles Similaires