Rails міграції — потужна можливість Ruby on Rails, яка дозволяє керувати та версіонувати схему бази даних з часом. Вони надають спосіб змінювати структуру бази даних у структурованому та організованому вигляді, що полегшує співпрацю з іншими розробниками та деплой змін у продакшн.
Розуміння Rails міграцій: up, down та скасування змін
У цій статті ми розглянемо:
- Що таке Rails міграції?
- Створення міграцій
- Запуск міграцій (
up
таdown
) - Скасування міграцій
- Скидання бази даних
- Різниця між методами
up
,down
, таchange
методи - Приклади поширених міграцій
- Найкращі практики
1. Що таке Rails міграції?
Rails міграції — це Ruby класи, які використовуються для зміни схеми бази даних. Кожна міграція є самостійним скриптом, який описує набір змін, що повинні бути внесені до бази даних, таких як створення або видалення таблиць, додавання чи видалення стовпців, або зміна індексів.
Міграції зберігаються в директорії db/migrate
і мають імена, що містять часові мітки для забезпечення їх виконання в правильному порядку.
2. Створення міграцій
Ви можете створити нову міграцію за допомогою команди rails generate migration
. Наприклад:
rails generate migration CreateProducts
3. Запуск міграцій (up
та down
)
Міграції мають два основних методи: up
і down
.
- Метод
up
: Цей метод використовується для застосування міграції, тобто для внесення змін до схеми бази даних. - Метод
down
: Цей метод використовується для скасування міграції, тобто для відкату змін, внесених методомup
.
Приклад:
class AddQuantityToProducts < ActiveRecord::Migration[6.1]
def up
add_column :products, :quantity, :integer
end
def down
remove_column :products, :quantity
end
end
У цьому прикладі:
- Метод
up
додає стовпецьquantity
до таблиціproducts
. - Метод
down
видаляє стовпецьquantity
з таблиціproducts
.
4. Скасування міграцій
Якщо потрібно скасувати міграцію, використовуйте команду rails db:rollback
. Це виконає метод down
останньої міграції.
rails db:rollback
Ви також можете скасувати кілька міграцій, вказавши параметр STEP
:
rails db:rollback STEP=2
Тут STEP вказує кількість останніх міграцій.
5. Скидання бази даних
Якщо потрібно скинути всю базу даних і запустити всі міграції з нуля, використовуйте команду rails db:reset
:
rails db:reset
Ця команда виконує наступне:
- Видаляє базу даних.
- Створює нову базу даних.
- Запускає всі міграції з початку.
6. Різниця між методами up
, down
та change
- Метод
up
: Використовується для застосування міграції. - Метод
down
: Використовується для скасування міграції. - Метод
change
: Спрощений метод, який Rails може використовувати для автоматичного генерування методуdown
для поширених операцій, таких якcreate_table
,add_column
тощо.
Приклад методу change
:
class AddQuantityToProducts < ActiveRecord::Migration[6.1]
def change
add_column :products, :quantity, :integer
end
end
У цьому прикладі Rails автоматично знає, як відмінити міграцію (тобто видалити стовпець quantity
) без необхідності вказувати явний метод down
.
7.
Приклади поширених міграцій
Створення таблиці
class CreateUsers < ActiveRecord::Migration[6.1]
def change
create_table :users do |t|
t.string :name
t.string :email
t.timestamps
end
end
end
Додавання стовпця
class AddAgeToUsers < ActiveRecord::Migration[6.1]
def change
add_column :users, :age, :integer
end
end
Видалення стовпця
class RemoveAgeFromUsers < ActiveRecord::Migration[6.1]
def change
remove_column :users, :age
end
end
Додавання індексу
class AddIndexToUsersEmail < ActiveRecord::Migration[6.1]
def change
add_index :users, :email, unique: true
end
end
Зміна типу стовпця
class ChangeAgeToFloatInUsers < ActiveRecord::Migration[6.1]
def change
change_column :users, :age, :float
end
end
8. Найкращі практики
- Зберігайте міграції ідемпотентними: Переконайтеся, що повторний запуск однієї й тієї ж міграції не викликає проблем. Це особливо важливо в продакшн середовищах.
- Уникайте зміни міграцій після їх виконання: Коли міграція вже була виконана в продакшн середовищі, уникайте її зміни. Замість цього створюйте нову міграцію для внесення подальших змін.
- Використовуйте метод
change
коли можливо: Використовуйте методchange
для простих міграцій, оскільки це зменшує необхідність написання обох методівup
таdown
. - Тестуйте міграції: Завжди тестуйте свої міграції в розробницькому середовищі перед їх запуском у продакшн.
- Резервне копіювання бази даних: Перед запуском міграцій у продакшн, переконайтеся, що у вас є резервна копія бази даних.
Міграції Rails є важливою частиною управління схемою бази даних в додатку Rails. Розуміння того, як створювати, запускати та скасовувати міграції, дозволить вам забезпечити безперервний розвиток вашої бази даних разом із додатком. Пам’ятайте про найкращі практики та тестуйте міграції ретельно, щоб уникнути потенційних проблем у продакшн середовищі.
З цим посібником ви маєте міцну основу для ефективної роботи з міграціями Rails. Щасливого кодування!
Перекладено з: Understanding Rails Migrations: up, down, and Reverting Changes