Здесь курят мануал.

Добро пожаловать на Пыху!

Логин:
Пароль:
 

Нет прописки? Зарегистрируйся!

Новости

Пыха переехала на новый сервер, ура!

Краснодарское время: 26 Май, 2012, 02:06:15

Страниц: [1]
Печать
Автор Тема: Что такое миграция в ROR и современных PHP фреймворках(клонах ROR)  (Прочитано 1846 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
killich    ↓ 
16 Август, 2009, 01:32:39
НЕ ХУЕТА! ХУЕТА!

Группа: Санитары

Карма: 20
Сообщений: 275
Сила слова: 7.27

Миграция (migration)
 
Миграция - файл, обеспечивающий последовательные изменения в БД и ее формирование. В файле миграции в стандартном для ROR виде описана структура создаваемой таблицы в БД или изменения, которые необходимо произвести в уже существующих таблицах.
 
Файлы миграции имеют уникальное имя, благодаря штампу системного времени в имени файла. Это позволяет следить за тем, какие миграции уже были выполнены, а какие не выполнены. В БД существует таблица migrations в которую при выполнении каждой миграции заносится штамп времени каждой миграции.
 
Благодаря файлам миграции мы можем быть уверены, что другой разработчик не добавил в БД поле, которое может нарушить структуру нашей БД или привести ее в негодность. Вся работа с БД (создание, формирование, изменение, удаление таблиц) проводится исключительно через миграции.
 
Пример файла миграции:
 

Ruby
class CreateRoles < ActiveRecord::Migration
  def self.up
    create_table :roles do |t|
      t.string    :name         # Английское имя роли
      t.string    :title        # Название Роли
      t.text      :description  # Текстовое описание Роли
      t.text      :settings     # Настройки Роли
     
      t.timestamps
    end
  end
 
  def self.down
    drop_table :roles
  end
end

 
Представленная миграция создает в БД таблицу roles, поскольку в ее миграции указано create_table :roles.
В таблице roles будут созданы поля соответствующих типов.
 
string => VARCHAR(250)
text => TEXT
timestamps => это сокращенное обозначение 2х полей со значением времени (created_at, updated_at)
 
Обратим внимание на указание параметров в виде :name, :description, :settings
Символ двоеточия обозначает специальный тип данных  в RUBY - СИМВОЛ (SYMBOL)
 
Символ - это полнейший аналог строки, за некоторыми очень тонкими особенностями хранения символов в оперативной памяти. Исходя из того, что Символ это аналог Строки, то приведенная выше миграции могла выглядеть так:
 

Ruby
class CreateRoles < ActiveRecord::Migration
  def self.up
    create_table 'roles' do |t|
      t.string    'name'         # Английское имя роли
      t.string    'title'        # Название Роли
      t.text      'description'  # Текстовое описание Роли
      t.text      'settings'     # Настройки Роли
     
      t.timestamps
    end
  end
 
  def self.down
    drop_table 'roles'
  end
end
 

Однако я уверен, что будет очень трудно не согласится, что набрать один символ : проще, а главное БЫСТРЕЕ, чем набрать две кавычки и перевести каретку для набора строки внутри кавычек. Именно во многом из-за скорости РУБИ программисты так любят СИМВОЛЫ.
« Последнее редактирование: 16 Август, 2009, 01:32:39 от adw0rd » Записан
phpdude    ↓ 
15 Август, 2009, 08:40:33 , спустя
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 345
Сообщений: 20793
Сила слова: 1.66

именно поэтому руби программистам недалеко до перла осталось
 
а по теме. как например сделать контатенацию?
 
:asds.:asdasd
 
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
killich    ↓ 
16 Август, 2009, 11:06:30 , спустя 14 часов 25 минут 57 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: Санитары

Карма: 20
Сообщений: 275
Сила слова: 7.27

PHP
:asds.:asdasd
Символы так не используют. Обычно Символ это строка, передаваемая в функцию в качестве аргумента и состоящая только из одного слова.
Просто случай, когда параметр является единственным словом очень и очень часто встречается. А милисекунды в повседневной работе складываются в секунды, минуты, часы, дни и недели.
 
Очень часто используются в ассоциативных хешах для обращения к элементам:
 
Ruby
           _policy_hash={
              policy_hash.policy.to_sym=>{
                :id=>policy_hash.id,
                :value=>policy_hash.value,
                :start_at=>policy_hash.start_at,
                :finish_at=>policy_hash.finish_at,
                :counter=>policy_hash.counter,
                :max_count=>policy_hash.max_count
              }
            }
« Последнее редактирование: 16 Август, 2009, 11:06:30 от killich » Записан
phpdude    ↓ 
15 Август, 2009, 08:48:56 , спустя
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 345
Сообщений: 20793
Сила слова: 1.66

ну я так и думал. забавная идея. в пхп одно слово тоже кстати можно не обрамлять кавычками ;)
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
CTAPbIu_MABP    ↓ 
15 Август, 2009, 10:05:49 , спустя 1 час 16 минут 53 секунды
НЕ ХУЕТА! ХУЕТА!

мавр
Группа: в ухо

Карма: не нужна
Сообщений: 5187
Сила слова: 1.81

у этой штуки тока одна проблема надо описывать не только то что должно получится а еще то как вернуть предыдущее в случаи отката
Записан

java.lang.OutOfMemoryError
killich    ↓ 
16 Август, 2009, 11:06:10 , спустя 13 часов 21 секунду
НЕ ХУЕТА! ХУЕТА!

Группа: Санитары

Карма: 20
Сообщений: 275
Сила слова: 7.27

Ruby
class AddContactsAndBorderingFlagToBulletin < ActiveRecord::Migration
  def self.up
    add_column :bulletins, :contacts, :string
    add_column :bulletins, :bordered, :string
  end
 
  def self.down
    remove_column :bulletins, :contacts
    remove_column :bulletins, :bordered
  end
end
 

Мы о чем говорим?! Если о том, что я не показал как описать откат - то вот оно.
Если наоборот тебя не устраивает наличие возможности отката - то для меня это странно.
 
И вообще из моей практики откат крайне не желателен - и если и делается - то только в состоянии разработки - на боевом серваке так конечно не пошалишь.
« Последнее редактирование: 16 Август, 2009, 11:06:10 от killich » Записан
CTAPbIu_MABP    ↓ 
16 Август, 2009, 01:52:03 , спустя 2 часа 45 минут 53 секунды
НЕ ХУЕТА! ХУЕТА!

мавр
Группа: в ухо

Карма: не нужна
Сообщений: 5187
Сила слова: 1.81

killich, я о том что если делаешь откат то
Ruby

    remove_column :bulletins, :contacts
 
это самый примитивный случай
 
на практике далеко не все так просто бывает, например ты не создавал колонок а манипулировал с данными, например чтото удалил, тогда тебе надо было делать файл с бэкапом из которого потом можно востановить
Записан

java.lang.OutOfMemoryError
Страниц: [1]
Печать
 

Перейти в: