Rails 4 выдает ожидающую ошибку миграции, даже если нет ожидающих миграций

Недавно я обновил мое приложение от Rails 3.2.15 до Rails 4.0.4, а тест рейка не срабатывает:

You have 161 pending migrations:
  20111126090934 DeviseCreateUsers
  20111126195631 AddUsernameToUsers
  20111128012039 CreateLocations
  20111129051416 AddConfirmableToDevise
...
Run 'rake db:migrate' to update your database then try again.

Уверен, у меня нет ожидающих миграций, и таблица schema_migrations обновлена со всеми номерами версий миграции. Также,

[2] pry(main)> ActiveRecord::Migration.check_pending!
  ActiveRecord::SchemaMigration Load (0.4ms)  SELECT 'schema_migrations'.* FROM 'schema_migrations'
=> nil
[3] pry(main)> 

Поскольку это среда разработки, я также попытался сбросить db с помощью:

$> rake db:migrate:reset

Я перемещаю свое приложение из Rails 3.2.15 в Rails 4.0.4. Я здесь не понимаю, не понимаю, что происходит.

$> rake db:migrate:status

Status   Migration ID    Migration Name
--------------------------------------------------
   up     20111126090934  ********** NO FILE **********
   up     20111126195631  ********** NO FILE **********
   up     20111128012039  ********** NO FILE **********
   up     20111129051416  ********** NO FILE **********
...
+2
источник поделиться
4 ответа

Это немного странно и расстраивает. У меня были подпапки в каталоге db/migrate, которые, хотя и были старше и уже перенесены, по какой-то причине попадали в список через ActiveRecord::Migrator#pending_migrations и, следовательно, ошибку. Удаление подпапок Исправлена ошибка.

Подумайте, как это работает в Rails 3 и не может найти никакой документации по этому поводу.

+3
источник

Наиболее вероятной причиной этой ошибки является то, что mysqldump не находится в вашем PATH. Rails 4 нуждается в создании тестовой базы данных и дает путаную ошибку о миграции, если она не найдена.

По умолчанию установка MySQL на OSX не включает mysql или mysqldump в вашем PATH, вам нужно будет изменить ваш файл ~/.profile и добавить что-то вроде:

export PATH=$PATH:/usr/local/mysql/bin

Или переустановите mysql из homebrew.

+2
источник

Чтобы добавить к Syed ответ:

Вместо удаления подпапок в db/migrate/, вы также можете переименовать их, чтобы начать с.. Это сработало для меня с activerecord 3.2.

Пример: переименовать db/migrate/archive/ в db/migrate/.archive/

0
источник

Когда вы пытаетесь запустить rake test, вам нужно выполнить миграцию в test среде.

rake db:migrate RAILS_ENV=test

-1
источник

Посмотрите другие вопросы по меткам или Задайте вопрос