2016-08-02 22 views
1

在Rails中,有时我们得到错误Rails如何知道迁移正在等待?

ActiveRecord::PendingMigrationError

怎么知道的Rails迁移未决?

标志/信息存储在哪里?

+0

检查你的数据库,有一个表'schema_migrations'。参见[文档](http://api.rubyonrails.org/classes/ActiveRecord/Migration.html)和[相关问题](http://stackoverflow.com/questions/12057408/how-does-rails-keep- track-of-migrations-have-run-for-a-database?rq = 1) –

回答

1

当创建模型或迁移时,会将时间戳添加到文件名中。

  20160727050119_create_user.rb 
     #time-stamp 20160727050119 

然后检索最后一个迁移标记的方法call(env)

 `mtime = ActiveRecord::Migrator.last_migration.mtime.to_i` 

,并把它比作@last_check,如果小于mtime

check_pending!被调用,显示ActiveRecord::PendingMigrationError

 ActiveRecord::Migration.check_pending!(connection) 

check_pending!

 def check_pending!(connection = Base.connection) 
     raise ActiveRecord::PendingMigrationError if ActiveRecord::Migrator.needs_migration?(connection) 
     end 

你可以找到所有这些信息.../lib/active-record/migration.rb

+0

有用的信息,并解释了我遇到的问题:如果您提交了schema.rb文件并且无法提交版本参数复制到文件顶部的'ActiveRecord :: Schema.define'以及其他更改,它可能会导致其他人(在我的情况下为CI系统)在尝试运行测试时获取挂起的迁移错误,因为模式版本小于最近迁移的时间戳。 – Leo

0

。在你的应用程序的数据库中的表称为schema_migrations,有所谓的版本一列。每个已经运行的迁移都会有一行。如果光盘上有一个迁移文件,其时间戳未包含在schema_migrations表中,那么Rails知道需要运行迁移。

相关问题