Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Rails - обновление скрипта миграции (specially for Google: updating the migration script) / 10 сообщений из 10, страница 1 из 1
20.09.2011, 15:34
    #37448273
BPK
BPK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Rails - обновление скрипта миграции (specially for Google: updating the migration script)
У меня есть программа на Rails, есть БД и какие-то скрипты миграции. Задача - поменять тип поля с BLOB на LONGBLOB так, чтобы корректно обновились скрипты миграции.

Стоит ли начать со скриптов или с изменения БД?

Если начать со скриптов, то сохранятся ли данные в БД после миграции?
Если начать со скриптов, то как это сделать правильно?

Если начать с БД, то как автоматически обновить скрипты?
...
Рейтинг: 0 / 0
20.09.2011, 17:01
    #37448453
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Rails - обновление скрипта миграции (specially for Google: updating the migration script)
BPK,

Добавить новую миграцию, которая будет добавлять нужный столбец, переливать данные и удалять старый столбец.
...
Рейтинг: 0 / 0
20.09.2011, 17:16
    #37448481
BPK
BPK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Rails - обновление скрипта миграции (specially for Google: updating the migration script)
Игорь ГорбоносBPK,

Добавить новую миграцию, которая будет добавлять нужный столбец, переливать данные и удалять старый столбец.

Всё руками, или можно сгенерировать шаблон миграции на основе текущего вида БД?
...
Рейтинг: 0 / 0
20.09.2011, 17:18
    #37448486
arni
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Rails - обновление скрипта миграции (specially for Google: updating the migration script)
1) сгенерировать новую миграцию, что-то типа:
Код: plaintext
script/generate migration something_change

2) В метод миграции self.up включить код смены типа поля, что-то типа:
Код: plaintext
change_column :your_table, :your_field, :new_datatype

3) Если нужно массово обновить/пересчитать поле в процессе миграции, то в метод Up включайте запросы, по типу:
Код: plaintext
execute "update men set salary=0 where active=0"
p.s. последнее - это не "ruby way"
...
Рейтинг: 0 / 0
20.09.2011, 17:48
    #37448561
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Rails - обновление скрипта миграции (specially for Google: updating the migration script)
arni,

+1

BPK, я не знаю наличие инструментов, которые делают миграцию по готовой БД, наверное и есть, НО при разработке на рельсе краеугольным камнем является модель данных в программе, на основе которой и делаются миграции - изменения структуры БД, а не наоборот.
С другой стороны миграция это текстовый файл, который можно сгенерировать и самому на любом доступном языке :)
...
Рейтинг: 0 / 0
20.09.2011, 18:04
    #37448601
BPK
BPK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Rails - обновление скрипта миграции (specially for Google: updating the migration script)
arni2) В метод миграции self.up включить код смены типа поля, что-то типа:
Код: plaintext
change_column :your_table, :your_field, :new_datatype

А в self.down ?
...
Рейтинг: 0 / 0
20.09.2011, 18:07
    #37448608
arni
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Rails - обновление скрипта миграции (specially for Google: updating the migration script)
BPKА в self.down ? тут код "обратной" миграции, если конечно изменения обратимы.
...
Рейтинг: 0 / 0
20.09.2011, 18:08
    #37448611
BPK
BPK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Rails - обновление скрипта миграции (specially for Google: updating the migration script)
arniBPKА в self.down ? тут код "обратной" миграции, если конечно изменения обратимы.
А если необратимы, то удалить self.down ?
...
Рейтинг: 0 / 0
20.09.2011, 18:11
    #37448618
BPK
BPK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Rails - обновление скрипта миграции (specially for Google: updating the migration script)
Уже нашёл:
Ruby on Rails Guide: MigrationsSometimes your migration will do something which is just plain irreversible, for example it might destroy some data. In cases like those when you can’t reverse the migration you can raise ActiveRecord::IrreversibleMigration from your down method. If someone tries to revert your migration an error message will be displayed saying that it can’t be done.
...
Рейтинг: 0 / 0
20.09.2011, 18:16
    #37448629
arni
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Rails - обновление скрипта миграции (specially for Google: updating the migration script)
BPKА если необратимы, то удалить self.down ? можно как пишут - через выброс исключения, но конкретно в данном случае либо оставить тело метода пустым, либо
Код: plaintext
change_column :your_table, :your_field, :old_datatype
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Rails - обновление скрипта миграции (specially for Google: updating the migration script) / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]