Det finns utmärkande skäl till varför du bör tänka på att ha olika databaser i din Ruby on Rails-applikation. I min situation förväntade jag mig att lagra stora mängder data. Tänk på att standarddatabasen är MySQL. I vår applikation database.yml-fil skriv anslutningar för MySQL på vanligt sätt. Efter det måste vi skapa anpassade filer för att ansluta postgresql i samma applikation.
Skapa de anpassade databasfilerna för att ansluta postgresql
Vi kommer att skapa en andra databas som heter "Statistik"
Skapa först filen config/database_stats.yml och fyll i den som du gör med den primära databasens konfigurationsfil. Din fil kommer att se ut ungefär så här:
utveckling:
adapter: postgresql
kodning: utf8
återanslut: falskt
databas: db_info_development
pool: 5
värd: lokalvärd
användarnamn: postgres
Lösenord:
Vi ska nu skapa en katalog som kommer att hålla schemat och alla migreringar av statistikdatabasen. Skapa katalog med namn db_stats i rälsroten och kopiera strukturen enligt nedan
–db
-flytta
schema.rb
frön.rb
–db_stats
-flytta
schema.rb
frön.rb
De skapade filerna ska vara tomma.
Lägg till Rake Tasks
För att hantera statistikdatabas måste vi skriva anpassade uppgifter för skapande, migrering och andra funktioner. Skapa en fil lib/tasks/db_stats.rake med innehållet nedan
namnutrymme :stats gör det
namnutrymme :db gör |ns|
uppgift :släpp gör
Rake::Task[“db:drop”].invoke
slutet
uppgift: skapa göra
Rake::Task[“db:create”].invoke
slutet
uppgift :setup gör
Rake::Task[“db:setup”].invoke
slutet
uppgift: migrera gör
Rake::Task[“db:migrate”].invoke
slutet
uppgift :rollback gör
Rake::Task[“db:rollback”].invoke
slutet
uppgift :frö gör
Rake::Task[“db:seed”].invoke
slutet
uppgift :version gör
Rake::Task[“db:version”].invoke
slutet
namnutrymme :schema gör
uppgift: ladda gör
Rake::Task[“db:schema:load”].invoke
slutet
uppgift :dump gör
Rake::Task[“db:schema:dump”].invoke
slutet
slutet
namnutrymme :test gör
uppgift: förbereda göra
Rake::Task[“db:test:prepare”].invoke
slutet
slutet
# lägg till och lägga till korrekta uppgifter till alla uppgifter som definieras här ovan
ns.tasks.each gör |task|
task.enhance [“stats:set_custom_config”] gör
Rake::Task[“stats:revert_to_original_config”].invoke
slutet
slutet
slutet
uppgift :set_custom_config gör
# spara ström vars
@original_config = {
env_schema: ENV['SCHEMA'],
config: Rails.application.config.dup
}
# ställer in konfigurationsvariabler för anpassad databas
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”]
slutet
uppgift :revert_to_original_config gör
# återställ konfigurationsvariabler till ursprungliga värden
ENV['SCHEMA'] = @original_config[:env_schema]
Rails.application.config = @original_config[:config]
slutet
slutet
När alla dessa inställningar är klara kan vi skapa statistikdatabasen och köra dess första migrering:
$ rake statistik:db:skapa $ rake statistik:db:migreraDetta kommer att generera statistikdatabasschemafilen i db_stats/schema.rb. Lägg till en anpassad migreringsgenerator Vi kan inte använda rails generator eftersom sökvägen hårdkodar db/migrera. Därför måste vi ha en anpassad generator för att skapa alla migrationer för statistikdatabasen. Skapa generatorn i lib/generators/stats_migration_generator.rb och klistra in följande kod: require 'rails/generators/active_record/migration/migration_generator' class StatsMigrationGenerator < ActiveRecord::Generators::MigrationGenerator source_root File.join(File.dirname(ActiveRecord::Generators::MigrationGenerator. instance_method(:create_migration_file) .source_location.first), “mallar”) def create_migration_file set_local_assigns! validera_filnamn! migration_template @migration_template, “db_stats/migrate/#{file_name}.rb” slutet slutet Med allt detta på plats kan vi nu generera migreringar för statistikdatabasen:
$ rails g stats_migration migration_nameDenna migreringsfil skapas i statistikdatabasens migreringskatalog db_stats/migrera. Efter det, kör följande kommando för att migrera.
$ rake statistik:db:migreraSlutför anslutning och modeller för PostgreSQL Vi är nästan klara. Lägg till en ny initialiseringsfil config/initializers/db_stats.rb och klistra in följande:
# spara statistik databasinställningar i global var DB_STATS = YAML::load(ERB.new(File.read(Rails.root.join(“config”,,”database_stats.yml”))).result)[Rails.env]Konfigurera mongodb: Mongoid gem är ett ODM (Object-Document-Mapper) ramverk för MongoDB i Ruby.
gem 'mongoid', '~> 5.1.0'Du kan skapa en konfigurationsfil genom att köra generatorn. Mongoid kommer sedan att hantera allt annat därifrån.
$ skenor g mongoid:configSedan skapar det mongoid.yml som nedan utveckling: kunder: standard: databas: mongoid värdar: -lokal värd:27017 Nu i vår applikation har vi framgångsrikt integrerat MySQL, postgresql och mongodb Tänk på tre modeller – Användare, Produkt, Bild. Att använda dessa tre modeller hjälper oss att koppla ihop olika databaser i vår applikation. Användarmodell med MySQL-anslutning klass Användare < ActiveRecord::Base slutet $ rails g migration create_users field_names rake db:migrera Denna migreringsfil skapas under db/migrera och den lagras under MySQL-databas. klass Produkt < ActiveRecord::Base upprätta_anslutning DB_STATS slutet $ rails g stats_migration create_products skapa db_stats/migrate/20151201191642_create_products.rb Denna migreringsfil skapas i statistikdatabasen migrate-katalogen db_stats/migrate. klassbild inkluderar Mongoid::Document fält :namn, typ: Sträng fält :beskrivning, typ: Sträng slutet Inget behov av att köra några migrationer för mongodb eftersom det är ODM. Denna data skapas under MongoDB. Känn dig fri att kontakta oss om du har någon fråga.
Katneni Naga Sai Tejaswi
Sr. Mjukvaruutvecklare
Prenumerera för de senaste uppdateringarna
relaterade inlägg