понедельник, 8 сентября 2008 г.

Миграции. Что такое миграция?

Как уже было описано в предыдущих статьях, рельсы работают с Базой данных через ActiveRecord(обьектная прослойка между Бд і web-приложением), настройка производится в одном единственном файле конфигурации. Возникает логичный вопрос - мы создали базу, настроили конфиги, так как же нам создать структуру БД??

Ответ - миграции. Что же такое миграция и зачем они вообще нужны?

Миграция - это файл который содержит описание создания в БД таблиц и полей. Чтобы создать миграцию воспользуйтесь или консолью или меню вашей IDE. В консоли надо набрать - ruby script/generate migration add_a_new_table. "Add a new table" - название миграции, которое должно описывать действие с БД.

Содержимое файла(Как пример приведем код создания таблицы юзеров):


class CreateUsers < ActiveRecord
def self.up
      create_table :users do |table|
         table.column :username, :string, :null => false, :limit => 60

         table.column :password, :string, :null => false
     end
end
def self.down
     drop_table :users
end
end

Детальнее типы данных рассмотрим в следующих статьях.

Таким образом отдельные миграции содержат отдельную логику создания новых структур. Код после
def self.down нужен для того чтобы миграцию можно было "откатить назад". Все миграции складываются в отдельную папку и их имя файла начинается с цыфры которая показывает ее место в списке. Миграции исполняются строго по очереди. Из за того что предусмотрен откат - мы можем безболезненно вернутся в любое последнее стабильное состояние БД до изминения.

Благодаря тому что миграции хранятся в отдельных, легкочитаемых файлах - достаточно только загрузить их из SVN и проммигрировать - и каждый разработчик получит точную копию основной БД на свою машину. Нет необходимости делать SQL дампы, а потом руками переносить все в нашу локальную базу. Так же легко и закомитить миграции в репозиторий где проведя миграции (на сервере проводяться в автоматичном режиме) мы внесем изминения в нашу рабочую БД.

Комментариев нет:

Отправить комментарий