Rails如何知道迁移正在等待处理?

时间:2016-08-02 23:49:54

标签: ruby-on-rails activerecord database-migration

在Rails中,有时我们会收到错误

ActiveRecord::PendingMigrationError

Rails如何知道迁移正在等待处理?

该标志/信息存储在哪里?

2 个答案:

答案 0 :(得分:3)

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

         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

答案 1 :(得分:1)

您的应用程序数据库中有一个名为 schema_migrations 的表,它有一个名为versions的列。每次运行的迁移都会有一行。如果光盘上有一个迁移文件,其时间戳未包含在 schema_migrations 表中,则Rails知道需要运行迁移。