Ruby on Rails - migracje

Migracja Railsów pozwala na użycie Rubiego do zdefiniowania zmian w schemacie bazy danych, umożliwiając użycie systemu kontroli wersji do synchronizacji rzeczy z rzeczywistym kodem.

Ma to wiele zastosowań, w tym -

  • Teams of developers - Jeśli jedna osoba dokona zmiany schematu, pozostali programiści muszą tylko zaktualizować i uruchomić „migrację rake”.

  • Production servers - Uruchom „rake migrate”, gdy wprowadzasz nową wersję, aby zaktualizować bazę danych.

  • Multiple machines - Jeśli programujesz zarówno na komputerze stacjonarnym, jak i laptopie lub w więcej niż jednej lokalizacji, migracje mogą pomóc w ich synchronizacji.

Co może zrobić migracja Railsów?

  • create_table (nazwa, opcje)
  • drop_table(name)
  • rename_table (stara_nazwa, nowa_nazwa)
  • add_column (nazwa_tabeli, nazwa_kolumny, typ, opcje)
  • rename_column (nazwa_tabeli, nazwa_kolumny, nazwa_nowej_kolumny)
  • zmiana_kolumny (nazwa_tabeli, nazwa_kolumny, typ, opcje)
  • remove_column (nazwa_tabeli, nazwa_kolumny)
  • add_index (nazwa_tabeli, nazwa_kolumny, typ_indeksu)
  • remove_index (nazwa_tabeli, nazwa_kolumny)

Migrations support all the basic data types - Poniżej znajduje się lista typów danych obsługiwanych przez migrację -

  • string - dla małych typów danych, takich jak tytuł.

  • text - w przypadku dłuższych fragmentów danych tekstowych, takich jak opis.

  • integer - dla liczb całkowitych.

  • float - dla liczb dziesiętnych.

  • datetime and timestamp - zapisz datę i godzinę w kolumnie.

  • date and time - przechowywać tylko datę lub tylko godzinę.

  • binary - do przechowywania danych, takich jak obrazy, dźwięk lub filmy.

  • Boolean - do przechowywania wartości prawda lub fałsz.

Valid column options are - Poniżej znajduje się lista prawidłowych opcji kolumn.

  • limit (: limit => „50”)

  • default (: default => „bla”)

  • null(: null => false oznacza NIE NULL )

NOTE - Czynności wykonywane przez Rails Migration mogą być wykonywane przy użyciu dowolnego front-endowego GUI lub bezpośrednio z zachęty SQL, ale Rails Migration sprawia, że ​​wszystkie te czynności są bardzo łatwe.

Więcej informacji na ten temat znajdziesz w Rails API .

Utwórz migracje

Oto ogólna składnia tworzenia migracji -

application_dir> rails generate migration table_name

Spowoduje to utworzenie pliku db / migrate / 001_table_name.rb. Plik migracji zawiera podstawową składnię Ruby, która opisuje strukturę danych tabeli bazy danych.

NOTE - Przed uruchomieniem generatora migracji zaleca się wyczyszczenie istniejących migracji wygenerowanych przez generatory modeli.

Stworzymy dwie migracje odpowiadające naszym trzem tabelom - books and subjects.

Migracja książek powinna wyglądać następująco -

tp> cd library
library> rails generate migration books

Powyższe polecenie generuje następujący kod.

migracja podmiotów powinna wyglądać następująco -

tp> cd library
library> rails generate migration subjects

Powyższe polecenie generuje następujący kod.

Zwróć uwagę, że podczas tworzenia migracji używasz małych liter dla książki i tematu oraz liczby mnogiej. Jest to paradygmat Rails, którego powinieneś przestrzegać za każdym razem, gdy tworzysz migrację.

Edytuj kod

Przejdź do podkatalogu db / migrate swojej aplikacji i edytuj każdy plik jeden po drugim, używając dowolnego prostego edytora tekstu.

Zmodyfikuj 001_books.rb w następujący sposób -

Kolumna ID zostanie utworzona automatycznie, więc nie rób tego również tutaj.

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

Metoda self.up jest używany podczas migracji do nowej wersji, self.downsłuży do cofania wszelkich zmian w razie potrzeby. W tym momencie powyższy skrypt zostanie wykorzystany do stworzeniabooks stół.

Zmodyfikuj 002_subjects.rb w następujący sposób -

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

Powyższy skrypt zostanie użyty do stworzenia subjects table i utworzy pięć rekordów w tabeli przedmiotów.

Uruchom migrację

Teraz, gdy utworzyłeś wszystkie wymagane pliki migracji. Nadszedł czas, aby wykonać je w bazie danych. Aby to zrobić, przejdź do wiersza poleceń i przejdź do katalogu biblioteki, w którym znajduje się aplikacja, a następnie wpiszrake migrate w następujący sposób -

library> rake db:migrate

Spowoduje to utworzenie tabeli „schema_info”, jeśli nie istnieje, która śledzi aktualną wersję bazy danych - każda nowa migracja będzie nową wersją, a wszystkie nowe migracje będą uruchamiane, dopóki baza danych nie będzie w aktualnej wersji.

RakeRuby jest podobna do budowy programu Unix make program, który korzysta z Rails, aby uprościć wykonywanie złożonych zadań, takich jak aktualizowanie struktury danej bazie danych za etc.

Uruchamianie migracji produkcyjnych i testowych baz danych

Jeśli chcesz określić, jakiego środowiska Railsów użyć do migracji, użyj zmiennej powłoki RAILS_ENV.

Na przykład -

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- W systemie Windows użyj polecenia „set RAILS_ENV = production” zamiast polecenia eksportu .

Co jest następne?

Teraz mamy dostępną naszą bazę danych i wymagane tabele. W dwóch kolejnych rozdziałach zajmiemy się dwoma ważnymi komponentami o nazwie Controller (ActionController) i View (ActionView).

  • Tworzenie kontrolerów (kontroler akcji).
  • Tworzenie widoków (widok akcji).