2011-01-04 6 views
0


Если я отредактировал свою shema и запустил db: migrate база данных не изменилась, но если я очистился до версии 0 и вспомню миграцию, она работает, но я потерял все данные базы данных.
Что случилось?db: migrate не имеет эффекта

ответ

4

Вот как db:migrate работы. Он поддерживает таблицу в базе данных под названием schema_migrations, которая отслеживает отметки времени миграции (т. Е. Если ваш файл называется 20090807152224_create_widgets.rb, то часть 20090807152224 - это метка времени - и строка, которая будет добавлена ​​в вашу таблицу schema_migrations).

Вы не должны изменять файл schema.rb вручную - этот файл получает автогенерирование в результате db:migrate.

Мыслящий в рельсах, что если вы хотите внести изменения в вашей схеме, вы собираетесь генерировать новую миграцию с этими изменениями и затем запустить db:migrate (который, в результате, будет обновляться файл schema.rb).

0

Когда вы говорите, что обновляете свою схему, означает ли это, что вы обновляете файл db/schema.rb или фактические миграции?

Если вы обновляете файл schema.rb, вы должны заметить, что он не будет иметь эффекта, поскольку файл будет автоматически сгенерирован.

Смотрите комментарий в верхней части файла:

# This file is auto-generated from the current state of the database. Instead of editing this file, 
# please use the migrations feature of Active Record to incrementally modify your database, and 
# then regenerate this schema definition. 
+0

Я обновил 20101217121533_create_users.rb с помощью одной новой строки, но если я очищу базу данных до версии 0 и после вызова db: migrate работает – Dodjs

0

Похоже, вы меняли файл миграции.

Не изменяйте файлы миграции. Добавьте новые. У вас могут быть изменения, которые изменяются, например, тип столбца. Бывают случаи, когда изменение старых миграций может быть полезным, но не делайте этого, если не знаете последствий. Как отмечали другие, не изменяйте схему, но я не думаю, что вы это делали.