Подтвердить что ты не робот

Rake db: rollback не работает?

Я пишу свое первое приложение Rails. Я запустил несколько команд rails generate model ... и rake db:migrate, но теперь я хочу изменить свою модель данных и поэтому вам нужно отменить несколько миграций.

docs говорит, что я могу отменить миграцию с помощью rake db:rollback, но это не работает. Когда я запускаю это в консоли, компьютер думает в течение нескольких секунд, но не вносит никаких изменений в db/migrate/ или db/migrate/schema.rb. На консоли не выводится вывод.

Правильно ли это поведение? Не следует ли db:rollback менять мою схему? Если да, может ли кто-нибудь подумать, почему он может не работать?

Я нахожусь в Rails v. 3.2.6.

ИЗМЕНИТЬ

В настоящий момент rake db:migrate:status дает

database: db/development.sqlite3

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20120617191211  Create irs
   up     20120701154357  Create paths
   up     20120701154421  Create nodes
   up     20120702151447  ********** NO FILE **********
  down    20120702155140  Create venues
  down    20120703233833  Remove path from venues
4b9b3361

Ответ 1

Решение (см. мой комментарий): run

rake db:migrate:status

и исправить проблемы, которые вы там найдете. В этом случае (при последующем наблюдении за @MarkThomas) вы можете проверить, все ли файлы, которые вам нужны, на месте.

Ответ 2

Если

rake db:migrate:status

дает вам миграцию, в которой говорится

up 20120702151447 ********** NO FILE **********

Тогда лучше всего было бы сделать (обратите внимание, что следующая команда удалит базу данных):

rake db:reset

переделать все миграции. Если последняя миграция отсутствует, то schema.rb будет иметь последнюю миграцию, которую будет искать rake db:migrate:

ActiveRecord::Schema.define(:version => 20120702151447) do

Измените это число до последнего в папке переноса.

Ответ 3

Это то, что сработало для меня. Объедините шаги, указанные в этом ответе, и прокомментируйте их по дБ.

  • запустить rake db: migrate: status
  • Если у вас есть запись **** NO FILE ****, просто отметьте номер версии как noFileVersion. Обратите внимание на версию записи чуть выше записи файла (stable_version).
  • создал файл "dummy" с именем noFileVersion_create_nothing.rb и body class CreateNothing < ActiveRecord::Migration def change end end
  • запустить rake db: перенести VERSION = stable_version
  • удалить noFileVersion_create_nothing.rb вручную.
  • запустить rake db: migrate.
  • запустите rake db: migrate: status again, чтобы проверить, не исчез ли файл.