Ruby on Rails - Migrazioni

Rails Migration ti permette di usare Ruby per definire le modifiche allo schema del tuo database, rendendo possibile l'uso di un sistema di controllo delle versioni per mantenere le cose sincronizzate con il codice reale.

Questo ha molti usi, tra cui:

  • Teams of developers - Se una persona apporta una modifica allo schema, gli altri sviluppatori devono solo aggiornare ed eseguire "rake migrate".

  • Production servers - Esegui "rake migrate" quando distribuisci una nuova versione per aggiornare anche il database.

  • Multiple machines - Se sviluppi sia su un desktop che su un laptop, o in più di una posizione, le migrazioni possono aiutarti a mantenerli tutti sincronizzati.

Cosa può fare Rails Migration?

  • create_table (nome, opzioni)
  • drop_table(name)
  • rename_table (old_name, new_name)
  • add_column (nome_tabella, nome_colonna, tipo, opzioni)
  • rename_column (table_name, column_name, new_column_name)
  • change_column (nome_tabella, nome_colonna, tipo, opzioni)
  • remove_column (nome_tabella, nome_colonna)
  • add_index (nome_tabella, nome_colonna, tipo_indice)
  • remove_index (nome_tabella, nome_colonna)

Migrations support all the basic data types - Di seguito è riportato l'elenco dei tipi di dati supportati dalla migrazione:

  • string - per piccoli tipi di dati come un titolo.

  • text - per dati testuali più lunghi, come la descrizione.

  • integer - per numeri interi.

  • float - per i decimali.

  • datetime and timestamp - memorizzare la data e l'ora in una colonna.

  • date and time - memorizzare solo la data o solo l'ora.

  • binary - per memorizzare dati come immagini, audio o filmati.

  • Boolean - per memorizzare valori veri o falsi.

Valid column options are - Di seguito è riportato l'elenco delle opzioni di colonna valide.

  • limit (: limit => "50")

  • default (: default => "blah")

  • null(: null => false implica NOT NULL )

NOTE - Le attività svolte da Rails Migration possono essere svolte utilizzando qualsiasi GUI front-end o direttamente sul prompt SQL, ma Rails Migration rende tutte queste attività molto semplici.

Vedi l' API Rails per i dettagli su questi.

Crea le migrazioni

Ecco la sintassi generica per creare una migrazione:

application_dir> rails generate migration table_name

Questo creerà il file db / migrate / 001_table_name.rb. Un file di migrazione contiene la sintassi di base di Ruby che descrive la struttura dei dati di una tabella di database.

NOTE - Prima di eseguire il generatore di migrazioni, si consiglia di pulire le migrazioni esistenti generate dai generatori di modelli.

Creeremo due migrazioni corrispondenti alle nostre tre tabelle: books and subjects.

La migrazione dei libri dovrebbe essere la seguente:

tp> cd library
library> rails generate migration books

Il comando sopra genera il codice seguente.

la migrazione dei soggetti dovrebbe essere la seguente:

tp> cd library
library> rails generate migration subjects

Il comando sopra genera il codice seguente.

Nota che stai usando le lettere minuscole per il libro e l'oggetto e il plurale durante la creazione delle migrazioni. Questo è un paradigma di Rails che dovresti seguire ogni volta che crei una migrazione.

Modifica il codice

Vai alla sottodirectory db / migrate della tua applicazione e modifica ogni file uno per uno usando un qualsiasi semplice editor di testo.

Modificare 001_books.rb come segue:

La colonna ID verrà creata automaticamente, quindi non farlo anche qui.

class Books < ActiveRecord::Migration
   
   def self.up
      create_table :books do |t|
         t.column :title, :string, :limit => 32, :null => false
         t.column :price, :float
         t.column :subject_id, :integer
         t.column :description, :text
         t.column :created_at, :timestamp
      end
   end

   def self.down
      drop_table :books
   end
end

Il metodo self.up viene utilizzato durante la migrazione a una nuova versione, self.downviene utilizzato per ripristinare eventuali modifiche, se necessario. In questo momento, lo script precedente verrà utilizzato per crearebooks tavolo.

Modificare 002_subjects.rb come segue:

class Subjects < ActiveRecord::Migration
   def self.up
      
      create_table :subjects do |t|
         t.column :name, :string
      end
	
      Subject.create :name => "Physics"
      Subject.create :name => "Mathematics"
      Subject.create :name => "Chemistry"
      Subject.create :name => "Psychology"
      Subject.create :name => "Geography"
   end

   def self.down
      drop_table :subjects
   end
end

Lo script precedente verrà utilizzato per creare subjects tabella e creerà cinque record nella tabella dei soggetti.

Esegui la migrazione

Ora che hai creato tutti i file di migrazione richiesti. È il momento di eseguirli sul database. Per fare ciò, vai a un prompt dei comandi e vai alla directory della libreria in cui si trova l'applicazione, quindi digitarake migrate come segue -

library> rake db:migrate

Questo creerà una tabella "schema_info" se non esiste, che tiene traccia della versione corrente del database: ogni nuova migrazione sarà una nuova versione e tutte le nuove migrazioni verranno eseguite fino a quando il database non sarà alla versione corrente.

Rakeè un programma di costruzione di Ruby simile a Unix make programma che Rails sfrutta, per semplificare l'esecuzione di compiti complessi come l'aggiornamento la struttura di una banca dati, ecc

Esecuzione di migrazioni per database di produzione e test

Se vuoi specificare quale ambiente Rails usare per la migrazione, usa la variabile di shell RAILS_ENV.

Ad esempio:

library> export RAILS_ENV = production
library> rake db:migrate
library> export RAILS_ENV = test
library> rake db:migrate
library> export RAILS_ENV = development
library> rake db:migrate

NOTE- In Windows, usa "set RAILS_ENV = production" invece del comando export .

Cosa c'è dopo?

Ora abbiamo a disposizione il nostro database e le tabelle richieste. Nei due capitoli successivi, esploreremo due componenti importanti chiamati Controller (ActionController) e View (ActionView).

  • Creazione di controller (controller di azione).
  • Creazione di viste (visualizzazione azione).