Ruby on rails 4 即使没有挂起的迁移,Rails 4也会抛出挂起的迁移错误
我最近将我的应用程序从Rails 3.2.15升级到Rails 4.0.4,rake测试失败: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`
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