Ruby on rails 4 即使没有挂起的迁移,Rails 4也会抛出挂起的迁移错误

Ruby on rails 4 即使没有挂起的迁移,Rails 4也会抛出挂起的迁移错误,ruby-on-rails-4,rails-migrations,Ruby On Rails 4,Rails Migrations,我最近将我的应用程序从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`

我最近将我的应用程序从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)> 
因为,这是我也尝试使用的开发环境:

我正在将我的应用程序从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 **********
...

当您试图运行
rake测试时,您需要在
test
环境中运行迁移


rakedb:migraterails\u ENV=test
这有点奇怪和令人沮丧。我在db/migrate目录中有一些子文件夹,尽管这些子文件夹比较旧并且已经迁移了,但出于某种原因,它们通过
ActiveRecord::Migrator\pending_migrations
列出,因此出现了错误。删除子文件夹修复了此问题


想知道这在Rails 3中是如何工作的,但找不到任何关于这方面的文档

此错误最可能的原因是mysqldump不在您的路径中。Rails 4需要它来创建测试数据库,如果找不到它,就会给出关于迁移的令人困惑的错误

OSX上默认安装的MySQL不包括路径中的MySQL或mysqldump,您需要修改~/.profile并添加如下内容:

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

或者从自制重新安装mysql。

要添加到Syed的答案中:

除了删除
db/migrate/
中的子文件夹外,还可以将其重命名为以“.”开头。这对我使用activerecord 3.2很有效


例如:将
db/migrate/archive/
重命名为
db/migrate/.archive/

尝试重置时会发生什么?似乎重置正确吗?@MikeH-R是的。没有抛出错误,命令完成。但是,在rake测试中,它再次显示了挂起的迁移。@rails4guides.com错误:不知道如何构建任务“rake db:status”我的错误,我的意思是rake db:migrate:status。它给出了“rake:migrate:status”上所有迁移文件的状态“up”。这是什么意思?没用。事实上,当我们进行rake测试时,它会调用db:test:prepare,它会加载模式并运行挂起的迁移。请看:我遇到了同样的问题(也有子文件夹),但我指定了一个特定的子文件夹,Rails应该在env config文件中为每个env迁移该子文件夹,然而这种情况在我身上仍然发生了一些reason@sixty4bit我也有同样的问题,你有什么解决方案吗?如何实例化一个新的ActiveRecord::MIgrator对象?我刚刚开始使用postgres在我的测试环境中遇到同样的问题。这是一个奇怪且令人沮丧的bug,因为似乎没有关于如何调试它的真实信息。
export PATH=$PATH:/usr/local/mysql/bin