Rails 如何知道迁移正在进行中?

ame*_*ior 3 activerecord ruby-on-rails database-migration

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

ActiveRecord::PendingMigrationError

Rails 如何知道迁移正在进行中?

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

小智 6

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

         20160727050119_create_user.rb
         #time-stamp 20160727050119
Run Code Online (Sandbox Code Playgroud)

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

       `mtime = ActiveRecord::Migrator.last_migration.mtime.to_i`
Run Code Online (Sandbox Code Playgroud)

并将其与比较@last_check,如果小于mtime

check_pending!被调用并被ActiveRecord::PendingMigrationError显示。

       ActiveRecord::Migration.check_pending!(connection) 
Run Code Online (Sandbox Code Playgroud)

检查待处理!

      def check_pending!(connection = Base.connection)
        raise ActiveRecord::PendingMigrationError if ActiveRecord::Migrator.needs_migration?(connection)
      end
Run Code Online (Sandbox Code Playgroud)

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


inf*_*sed 5

应用程序的数据库中有一个名为schema_migrations的表,其中有一个名为 versions 的列。每个已运行的迁移都会有一行。如果磁盘上有一个迁移文件,其时间戳不包含在schema_migrations表中,那么 Rails 就知道需要运行迁移。