我最近将我的应用程序从Rails 3.2.15升级到Rails 4.0.4并且rake测试失败了抛出:
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)>
由于这是开发环境,我还尝试reset 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 **********
...
答案 0 :(得分:3)
这有点奇怪和令人沮丧。我在db / migrate目录中有子文件夹,即使较旧且已经迁移,由于某种原因,它们也会通过ActiveRecord::Migrator#pending_migrations
列出并因此出错。删除子文件夹修复此问题。
想知道这在Rails 3中是如何工作的,并且找不到任何关于此的文档。
答案 1 :(得分:2)
此错误的最可能原因是mysqldump不在您的PATH中。 Rails 4需要创建测试数据库,如果没有找到,则会出现有关迁移的混乱错误。
在OSX上MySQL的默认安装不包括你的PATH中的mysql或mysqldump,你需要修改你的〜/ .profile并添加如下内容:
export PATH=$PATH:/usr/local/mysql/bin
或者从homebrew重新安装mysql。
答案 2 :(得分:0)
添加到Syed的答案:
您可以重命名它们,而不是删除.cookies
中的子文件夹,而不是将其重命名为'。'。这对我使用activerecord 3.2。
Ex:将db/migrate/
重命名为db/migrate/archive/
答案 3 :(得分:-1)
当您尝试运行rake test
时,您需要在test
环境中运行迁移。
rake db:migrate RAILS_ENV=test