db: миграция не имеет никакого эффекта - PullRequest
0 голосов
/ 04 января 2011


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

Ответы [ 3 ]

4 голосов
/ 04 января 2011

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

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

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

0 голосов
/ 05 января 2011

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

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

0 голосов
/ 04 января 2011

Когда вы говорите, что обновляете свою схему, означает ли это, что вы обновляете файл 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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...