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).